NSUserDefaults用于存储数据量小的数据,例如用户配置。并不是所有的东西都能往里放的,只支持:NSString,NSNumber,NSDate, NSArray, NSDictionary,自定义类可以通过NSData的方式进行存储,当然要实现NSCoding这个protocol才行,NSObject<NSCoding>,详细方法可以查看类文件。
NSUserDefaultsstandardUserDefaults用来记录一下永久保留的数据非常方便,不需要读写文件,而是保留到一个NSDictionary字典里,由系统保存到文件里, 系统会保存到该应用下的/Library/Preferences/gongcheng.plist文件中。需要注意的是如果程序意外退出,NSUserDefaultsstandardUserDefaults数据不会被系统写入到该文件,所以,要使用[[NSUserDefaultsstandardUserDefaults] synchronize]命令直接同步到文件里,来避免数据的丢失。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"value"forKey:@"key"];
//[[NSUserDefaults standardUserDefaults]setObject:@"value" forKey:@"key"];
[defaults synchronize];//保存
NSString *testStr = [defaults objectForKey:@"key"];
NSLog(@"testStr is: %@",testStr);
通过查看官方文档。UserDefaults不是立即写入,而是根据时间戳定时的把缓存中的数据写入本地磁盘。所以调用了set方法之后数据有可能还没有写入磁盘应用程序就终止了。出现以上问题。可以通过调用synchornize方法强制写入。
在使用NSUserDefaults的时候,
NSDictionary* defaults = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
NSLog(@"Defaults: %@", defaults);
可以获得设备上的所有的NSUserDefaults的设置。
也可以保存自定义类,分享个链接http://zani.iteye.com/blog/1431239