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] ;