NSUserDefaults用來存儲相似用戶的配置等一些比較小的數據。緩存
1、建立NSUserDefaults對象spa
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
2、建立NSUserDefaults對象以後便可往裏面添加數據,它支持的數據類型有NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等系統定義的數據類型,若是要存放自定義的對象(如自定義的類對象),則必須將其轉換成NSData存儲:code
NSArray *arr = [[NSArray alloc] initWithObjects:@"arr1", @"arr2", nil] [userDefault setObject:arr forKey:@"arrItem"]; [userDefault setObject:@"admin" forKey:@"user_name"]; [userDefault setBOOL:@YES forKey:@"auto_login"]; [userDefault setInteger:1 forKey:@"count"];
3、往NSUserDefaults添加數據後,它們就變成了全局的變量,App中便可讀寫NSUserDefault中的數據:對象
NSUserDefaults *mySettingDataR = [NSUserDefaults standardUserDefaults]; NSLog(@"arrItem=%@", [mySettingDataR objectForKey:@"arrItem"]); NSLog(@"user_name=%@", [mySettingDataR objectForKey:@"user_name"]); NSLog(@"count=%d", [mySettingDataR integerForKey:@"count"]);
4、若是想刪除某個數據項,可使用removeObjectForKey刪除數據:rem
[mySettingData removeObjectForKey:@"arrItem"];
5、須要注意的是,NSUserDefaults是定時把緩存中的數據寫入磁盤的,而不是即時寫入,爲了防止在寫完NSUserDefaults後程序退出致使的數據丟失,能夠在寫入數據後使用synchronize強制當即將數據寫入磁盤:it
[mySettingData synchronize];
6、如果寫入自定義類,應該在類實現如下兩個方法io
- (id) initWithCoder: (NSCoder *)coder { if (self = [super init]) { // your code self._firstName = [coder decodeObjectForKey:@"_firstName"]; self._lastName = [coder decodeObjectForKey:@"_lastName"]; } return self; } - (void) encodeWithCoder: (NSCoder *)coder { // your code [coder encodeObject:_firstName forKey:@"_firstName"]; [coder encodeObject:_lastName forKey:@"_lastName"]; }
7、而後再存取時經過NSData作載體:ast
BusinessCard *bc = [[BusinessCard alloc] init]; NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; // 將對象轉換成NSData NSData *udObject = [NSKeyedArchiver archivedDataWithRootObject:bc]; [ud setObject:udObject forKey:@"myBusinessCard"]; udObject = nil; udObject = [ud objectForKey:@"myBusinessCard"]; // 講NSData轉換成對象 bc = [NSKeyedUnarchiver unarchiveObjectWithData:udObject] ;