一着撩、NSUserDefaults簡(jiǎn)介
NSUserDefaults類用來(lái)保存應(yīng)用程序設(shè)置和屬性以及用戶數(shù)據(jù)减余。例如驮履,你可以存儲(chǔ)用戶在應(yīng)用程序中使用的圖片或者默認(rèn)顏色方案惭蟋,活著背景等苦锨。這些對(duì)象存儲(chǔ)在iOS所謂的“defaults”系統(tǒng)中逼泣。
NSUserDefaults是一個(gè)單例,在整個(gè)app中都可以用舟舒,同時(shí)也是線程安全的拉庶,NSUserDefaults存儲(chǔ)的本質(zhì)就是一個(gè)plist文件。
NSUserDefaults存儲(chǔ)的位置為沙盒的/Library/Preferences
-
NSUserDefaults可以存儲(chǔ)的數(shù)據(jù)類型只能是屬性列表文件(Property List)所能存儲(chǔ)的數(shù)據(jù)類型,包括NSString秃励、NSSArray氏仗、NSDictionary、NSData夺鲜、NSDate廓鞠、NSNumber(Integer、Float谣旁、Double)床佳、BOOL值运嗜、NSURL桨嫁。如果想要保存其它類型數(shù)據(jù)你稚,需要轉(zhuǎn)換為NSData、NSNumber嫡霞、NSString灼舍、活著進(jìn)行歸檔(archive)更卒。
注意點(diǎn)1:UserDefaults為了避免在每次讀取數(shù)據(jù)時(shí)候都打開(kāi)用戶默認(rèn)數(shù)據(jù)庫(kù)的操作伊群,所以調(diào)用了set方法后不會(huì)立即寫入,而是根據(jù)時(shí)間戳定時(shí)的把緩存中的數(shù)據(jù)寫入本地磁盤影兽。所以調(diào)用了set方法之后數(shù)據(jù)有可能還沒(méi)有寫入磁盤應(yīng)用程序就終止了揭斧。出現(xiàn)以上問(wèn)題【撸可以通過(guò)調(diào)用
synchornize
方法強(qiáng)制寫入讹开。注意點(diǎn)2:從NSUserDefaults返回的值是不可變的,即便是你在存儲(chǔ)的時(shí)候使用的是可變的值捐名。例如你使用mutable string做為“MyStringDefault”的值旦万,當(dāng)你做使用stringForKey:方法獲取的值,這個(gè)值仍然是不可變的镶蹋。
二成艘、NSUserDefaults的使用
1.存儲(chǔ)數(shù)據(jù)
- (void)setObject:(nullable id)value forKey:(NSString *)defaultName;
- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
- (void)setFloat:(float)value forKey:(NSString *)defaultName;
- (void)setDouble:(double)value forKey:(NSString *)defaultName;
- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;
- (void)setURL:(nullable NSURL *)url forKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0);
2.讀取數(shù)據(jù)
- (nullable id)objectForKey:(NSString *)defaultName;
- (nullable NSString *)stringForKey:(NSString *)defaultName;
- (nullable NSArray *)arrayForKey:(NSString *)defaultName;
- (nullable NSDictionary<NSString *, id> *)dictionaryForKey:(NSString *)defaultName;
- (nullable NSData *)dataForKey:(NSString *)defaultName;
- (nullable NSArray<NSString *> *)stringArrayForKey:(NSString *)defaultName;
- (NSInteger)integerForKey:(NSString *)defaultName;
- (float)floatForKey:(NSString *)defaultName;
- (double)doubleForKey:(NSString *)defaultName;
- (BOOL)boolForKey:(NSString *)defaultName;
- (nullable NSURL *)URLForKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0);
3.移除數(shù)據(jù)
- (void)removeObjectForKey:(NSString *)defaultName;
4.同步數(shù)據(jù)
- (BOOL)synchronize;
5. 得到NSUserDefaults的對(duì)象
每次操作時(shí),需要先獲取NSUserDefaults的對(duì)象
+ (NSUserDefaults *)standardUserDefaults;