NSUserDefaults是一個(gè)單例,在整個(gè)程序中只有一個(gè)實(shí)例對(duì)象,它可以用于數(shù)據(jù)的永久保存,而且簡單實(shí)用,適合存儲(chǔ)輕量級(jí)的本地?cái)?shù)據(jù)存儲(chǔ),比如保存登陸界面的用戶名、密碼之類的簡單數(shù)據(jù)(注釋:個(gè)人理解簡單的用戶名密碼是可以依賴 NSUserDefaults存儲(chǔ),但是整套用戶信息或是一些數(shù)據(jù)還是盡量存儲(chǔ)成文件較為合理),或是某些計(jì)數(shù)統(tǒng)計(jì)之類較輕量級(jí)的數(shù)據(jù),并使之本地持久化,除非APP卸載否則一直保存。
NSUserDefaults支持的數(shù)據(jù)類型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL。
// 初始化NSUserDefaults,[NSUserDefaults standardUserDefaults]是系統(tǒng)提供的單例方法。
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
// [[NSUserDefaults standardUserDefaults] setObject:forKey:]存儲(chǔ)數(shù)據(jù)[userDefaults setObject:array forKey:@"user"];
// 持久化數(shù)據(jù),直接同步到文件里 [[NSUserDefaults standardUserDefaults] synchronize]
// NSUserDefaults是定時(shí)把緩存中的數(shù)據(jù)寫入磁盤的,而不是即時(shí)寫入,為了防止在寫完NSUserDefaults后程序退出導(dǎo)致的數(shù)據(jù)丟失,可以在寫入數(shù)據(jù)后使用synchronize強(qiáng)制立即將數(shù)據(jù)寫入磁盤: 運(yùn)行同步代碼后,NSUserDefaults中的數(shù)據(jù)即被寫入到.plist文件中,如果是在模擬器上運(yùn)行程序,可以在Mac的/Users/YOUR-USERNAME/Library/Application Support/iPhone Simulator/4.1/Applications/YOUR-APP-DIR/Library/Prefereces目錄下面找到一個(gè)文件名為YOUR-Bundle_Identifier.plist的plist文件,用Xcode打開該文件,可以看到剛才寫入的數(shù)據(jù)。
[userDefaults synchronize];
// [[NSUserDefaults standardUserDefaults] objectForKey:@"user"]來獲取已存數(shù)據(jù),“這里的objectForKey需要對(duì)應(yīng)合適的數(shù)據(jù)類型取值方法”[userDefaults objectForKey:@"user"]
// 如果想刪除某個(gè)數(shù)據(jù)項(xiàng),可以使用removeObjectForKey刪除數(shù)據(jù)
[userDefaults removeObjectForKey:@"user"];
這里列舉兩種數(shù)據(jù)類型的使用方法:
1、存儲(chǔ)字符串(NSString)類型的數(shù)據(jù)代碼如下:
NSString *passWord = @"密碼:1234567";
[[NSUserDefaults standardUserDefaults] setObject:passWord forKey:@"userPassWord"];
[[NSUserDefaults standardUserDefaults] synchronize];
//將數(shù)據(jù)取出也很簡單,只需要取出key 對(duì)應(yīng)的值就好了,代碼如下:
NSString *password = [[NSUserDefaults standardUserDefaults] objectForKey:@"userPassWord"];
[self.clickBtn setTitleColor:[UIColor blackColor] forState:(UIControlStateNormal)];
[self.clickBtn setTitle:password forState:(UIControlStateNormal)];
2、存儲(chǔ)整數(shù)型數(shù)據(jù)代碼如下:
NSInteger clickCount = [[NSUserDefaults standardUserDefaults] integerForKey:@"ClickCount"];
clickCount ++;
[[NSUserDefaults standardUserDefaults] setInteger:clickCount forKey:@"ClickCount"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSInteger num = [[NSUserDefaults standardUserDefaults] integerForKey:@"ClickCount"];
其他數(shù)據(jù)類型的存儲(chǔ)就不在這里一一列舉了,要是你的項(xiàng)目用到其他數(shù)據(jù)類型可查看NSUserDefaults
的API 。
// 適用的數(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;
這是根據(jù)蘋果官方文檔上的相關(guān)信息和項(xiàng)目經(jīng)驗(yàn),做的一些總結(jié),如果你發(fā)現(xiàn)不準(zhǔn)確或有新的建議可以留言或評(píng)論。