IOS中数据持久化1-NSUserDefaults
重要的放开头,下面请注意:
NSUserDefaults的所有数据都放在内存里,因此操作速度很快,并还提供一个归档方法:+ (void)synchronize。开发者自定义的配置项(如图2中的最后一项 key:alkdjfkladsjfmm)会以plist格式的文件归档在相应应用目录的/Library/Preferences/[App_Bundle_Identifier].plist文件。再次初始化获得实例对象后,框架会把用户自定义的这个配置和系统配置合并得到完整数据。
这句话就是说 当你加载一次 NSUserDefaults后,他会把全部的数据都载入到内存里边,而且之后就是常驻内存了.
再想一想, 你辛辛苦苦折腾他了老半天,就为了节省那么一点内存,哪知道加载NSUserDefaults就会浪费些许内存,一旦你把大规模的数据全部存到NSUserDefaults,这样的结果可能是灾难性的!
所以,NSUserDefaults存储大量数据最好别用,还是去找sqlite 和CoreData比较好
数据持久化在编程中非常重要,这里我分别对IOS中常见的数据持久化方法做一下简单地总结.
NSUserDefaults使用起来还是很简单地就不多说了,这里有两篇篇很好地文章推荐一下:
http://blog.csdn.net/enuola/article/details/7959767
http://blog.csdn.net/lxinl/article/details/11770675
使用说明:
1.NSUserDefaults只是一个很小的plist文件,适合存储轻量级的本地数据,不适宜存储大量数据,一般用来保存用户信息,偏好设置等小量数据.
2.NSUserDefaults支持的数据格式有限,只支持简单地数据格式,具体有 NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL等常见类型,复杂对象就不能用它了.
3.NSUserDefualts设计为单例模式,所以具有拿来即用的优点. NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults];
4.存储数据:
除NSNumber类型使用相对于的类型外,其他的都用setObject:forKey:
简单地两个示例:
[userDefaults setDouble:myDouble forKey:@"myDouble"];
[userDefaults setObject:myDictionary forKey:@"myDictionary"];
[userDefaults synchronize]; // 需要注意的是,NSUserDefaults是定时把缓存中的数据写入磁盘的,而不是即时写入,为了防止在写完NSUserDefaults后程序退出导致的数据丢失,可以在写入数据后使用synchronize强制立即将数据写入磁盘
5.读取数据
// 使用相应类型读取即可,示例如下,原理相同:
NSInteger myInteger = [userDefaultes integerForKey:@"myInteger"];
NSString *myString = [userDefaultes stringForKey:@"myString"];
//读取NSDate日期类型的数据
NSDate *myDate = [userDefaultes valueForKey:@"myDate"];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
txtNSDate.text = [NSString stringWithFormat:@"%@",[df stringFromDate:myDate]];
//读取字典类型NSDictionary类型的数据
NSDictionary *myDictionary = [userDefaultes dictionaryForKey:@"myDictionary"];
[mySettingDataR objectForKey:@"user_name"]
//删除
[mySettingData removeObjectForKey:@"arrItem"];
// 删除所有保存信息
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
[userDefaults synchronize];
以上示例只是简单说明NSUserDefaults的使用方式.