****** 数据持久化常用的五种方式 ******
1.plist文件(属性列表)
2.preference(偏好设置)
3.NSKeyedArchiver(归档)
4.SQLite 3
5.CoreData
偏好设置是专门用来保存应用程序的配置信息的,一般不要在偏好设置中保存其他数据。
如果没有调用synchronize方法,系统会根据I/O情况不定时刻地保存到文件中。所以如果需要立即写入文件的就必须调用synchronize方法。
偏好设置会将所有数据保存到同一个文件中。即preference目录下的一个以此应用包名来命名的plist文件。
NSUserDefaults适合存储轻量级的本地数据,如登陆界面的数据,用户名、密码等用户偏好设置类的数据。下次启动应用的时候就可以直接从NSUserDefaults里面读取上次运行的数据。
如果使用自己建立的plist文件什么的,需要自己显式创建文件,读取文件,很麻烦,而如果用NSUserDefaults则不用管这些,就像读字典一样,直接读取数据就可以了,同时NSUserDefaults有缓存机制,可以避免频繁读写文件。
NSUserDefaults支持的数据格式有:NSNumber(BOOL、Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,NSData类型。
NSUserDefaults不能存储可变(mutable)类型,只能存储不可变类型
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//添加preference
[defaults setObject:@"value1" forKey:@"key1"];
[defaults setObject:@1111 forKey:@"key2"];
[defaults synchronize];
//删除preference
[defaults removeObjectForKey:@"key1"];
[defaults synchronize];
//修改preference
[defaults setObject:@"value2" forKey:@"key1"];
[defaults synchronize];
//删除所有preference
NSString *appDomainStr = [[NSBundle mainBundle] bundleIdentifier];
[defaults removePersistentDomainForName:appDomainStr];
NSString *key1Value = [defaults objectForKey:@"key1"];
NSNumber *key2Value = [defaults objectForKey:@"key2"];
NSLog(@"偏好设置=%@=%@",key1Value,key2Value);