数据持久化方式
ios中的数据持久化方式,基本上有以下四种:属性列表(plist文件)、对象归档(NSKeyedArchiver)、SQLite3和CoreData
1.属性列表
涉及到的主要类:NSUserDefaults,一般[NSUserDefaults StandardUserDefaults]就够用了
@interface User:NSObject
@property(nonatomic,assign)NSIntegeruserID;
@end
1.1使用方法
1.1.1分开存取
//存
[[NSUserDefaultsstandardUserDefaults] setInteger:userID forKey:@”userID”];
//取
NSIntegeruId = [[NSUserDefaults standardUserDefaults] integerValueForKey:@”userID”];
1.1.2按对象存取
//存
[[NSUserDefaultsstandardUserDefaults] setObject:self forKey:@”user”];
//取
User*u = [[NSUserDefaults standardUserDefaults] objectForKey:@”user”];
1.2plist文件
只有以下列出的类型才能使用plist文件存储:
[NSArray、NSMutableArray、NSDictionary、NSMutableDictionary、NSData、NSMutableData、NSString、NSMutableString、NSNumber、NSDate]
2.对象归档
要使用对象归档,对象必须实现NSCoding协议,大部分Object C对象都符合NSCoding协议,也可以在自定义对象中实现NSCoding协议,要实现NSCoding协议,实现两个方法:
-(void)encodeWithCoder:(NSCoder*)encoder;
-(void)initWithCoder:(NSCoder*)encoder;
同时,建议对象也同时实现NSCoding协议,该协议允许复制对象,要实现NSCoding协议需实现-(id)copyWithZone:(NSZone *)zone;方法。
-(void)encodeWithCoder:(NSCoder*)encoder {
//这里放置需要持久化的属性
}
-(void)initWithCoder:(NSCoder*)encoder {
if(self= [selfinit]) {
//这里务必和encodeWithCoder方法里面的内容一致,不然会读不到数据
}
return self;
}
以上两个方法一定要实现,不然在调用的时候会crash
注意:如果归档的类是某个自定义的子类时,就需要在归档和解档之前先实现父类的归档和解档方法。
即[super
encodeWithCoder:aCoder]和[superinitWithCoder:aDecoder]方法。
3.SQLite3
在ios中使用SQLite3,需要添加库文件:libsqlite3.dylib并导入主头文件
SQLite3是一个开源的嵌入式关系数据库。SQLite可移植性好,很容易使用,很小,高效而且可靠。适合用于嵌入式设备。
SQLite嵌入到使用它的应用程序中,他们公用相同的进程空间,而不是单独的一个进程。
4.CoreData
Core Data本质上是使用SQLite保存数据,但是它不需要编写任Core Data,需要在Xcode中的数据模型编辑器中设计好各个实体以及定义好他们的属性和关系。