1.NSUserDefaults簡介
1.iOS下可以使用NSUserDefaults、sqlite、CoreData幾種常用的方式來存儲(chǔ)數(shù)據(jù),其中NSUserDefaults用來存儲(chǔ)類似用戶的配置等這些的數(shù)據(jù),后兩者用戶存儲(chǔ)大批量和比較復(fù)雜的數(shù)據(jù)。
創(chuàng)建NSUserDefaults對(duì)象之后即可往里面添加數(shù)據(jù),它支持的數(shù)據(jù)類型有NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等系統(tǒng)定義的數(shù)據(jù)類型,如果要存放自定義的對(duì)象(如自定義的類對(duì)象),則必須將其轉(zhuǎn)換成NSData存儲(chǔ)
2.NSUserDefaults適合存儲(chǔ)輕量級(jí)的本地?cái)?shù)據(jù),一些簡單的數(shù)據(jù)(NSString類型的)例如密碼,網(wǎng)址等,NSUserDefaults肯定是首選,但是如果我們自定義了一個(gè)對(duì)象,對(duì)象保存的是一些信息,這時(shí)候就不能直接存儲(chǔ)到NSUserDefaults了
2.使用
~ 如果想要將上述數(shù)據(jù)類型的數(shù)據(jù)永久保存到NSUserDefaults中去,只需要簡單的操作(一個(gè)Value 一個(gè)Key ),例如,想要保存一個(gè)NSString的對(duì)象,代碼實(shí)現(xiàn)為:
//將NSString 對(duì)象存儲(chǔ)到 NSUserDefaults 中
NSString *passWord = @"1234567";
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
[user setObject:passWord forKey:@"userPassWord"];
~ 將數(shù)據(jù)取出也很簡單,只需要取出key 對(duì)應(yīng)的值就好了,代碼如下:
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
NSString *passWord = [ user objectForKey:@"userPassWord"];
3.注意點(diǎn)
注意:對(duì)相同的Key賦值約等于一次覆蓋,要保證每一個(gè)Key的唯一性值得注意的是:
NSUserDefaults 存儲(chǔ)的對(duì)象全是不可變的(這一點(diǎn)非常關(guān)鍵,弄錯(cuò)的話程序會(huì)出bug),例如,如果我想要存儲(chǔ)一個(gè) NSMutableArray 對(duì)象,我必須先創(chuàng)建一個(gè)不可變數(shù)組(NSArray)再將它存入NSUserDefaults中去,代碼如下:
NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@"123",@"234", nil];
NSArray * array = [NSArray arrayWithArray:mutableArray];
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
[user setObject:array forKey:@"記住存放的一定是不可變的"];
取出數(shù)據(jù)是一樣的,想要用NSUserDefaults中的數(shù)據(jù)給可變數(shù)組賦值先給出一個(gè)錯(cuò)誤的寫法:
/*-------------------------錯(cuò)誤的賦值方法-------------------*/
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
//這樣寫后,mutableArray 就變成了不可變數(shù)組了,如果你要在數(shù)組中添加或刪除數(shù)據(jù)就會(huì)出現(xiàn)bug
NSMutableArray *mutableArray = [user objectForKey:@"記住存放的一定是不可變的"];
正確的寫法:
/*-------------------------正確的賦值方法-------------------*/
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
//可以用alloc 方法代替
NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:[user objectForKey:@"記住存放的一定是不可變的"]];
謝謝!