对于数据的持久化存储,iOS中一般提供了4种不同的机制。
1.NSUserDefaults
2.对象归档
3.数据库存储(SQLite)
4.Core Data
1.NSUserDefaults
在iOS开发中,对于少量的用户设置或应用程序状态的数据,通常使用NSUserDefaults来保存。
NSUserDefaults支持的数据格式有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL类型。
2.对象归档
使用两个类:NSKeyedArichiver、NSKeyedUnarchiver
可以用 NSKeyedArchiver 类来实现数据模型缓存。
为了把模型对象用 NSKeyedArchiver 归档, 模型类需要遵循 NSCoding 协议。
NSCoding 协议方法
-(void)encodeWithCoder:(NSCoder *)aCoder;
-(id)initWithCoder:(NSCoder *)aDecoder;
当模型遵循 NSCoding 协议时,归档对象就很简单,只要调用下列方法中的一个:
[NSKeyedArchiver archiveRootObject:objectForArchiving toFile:archiveFilePath];
[NSKeyedArchiver archivedDataWithRootObject:objectForArchiving];
第一个方法在 archiveFilePath 指定的路径下创建一个归档文件。
第二个方法则返回一个 NSData 对象。NSData 通常更快,因为没有文件访问开销,但对象保存在应用的内存中,如果不定期检查的话会很快用完内存。
NSKeyedUnarchiver 类用于从文件(或者 NSData 指针)反归档模型。
根据反归档的位置,选择使用下面两个类方法。
[NSKeyedUnarchiver unarchiveObjectWithData:data];
[NSKeyedUnarchiver unarchiveObjectWithFile:archiveFilePath];
这 4 个方法在转化序列化数据时能派上用场。
使用任何 NSKeyedArchiver/NSKeyedUnarchiver 的前提是模型实现了 NSCoding 协议。
3. 数据库存储(SQLite)
和Android一样,iOS中也是用了SQLite这种嵌入式数据库。
SQLite 是一个轻量级的关系数据库。在使用时,只需要加入 libsqlite3.dylib 依赖以及引入 sqlite3.h 头文件即可。FMDB 是将SQLite API进行封装的库,是开源社区中的优秀者。
FMDB同时兼容ARC和非ARC工程,会自动根据工程配置来调整相关的内存管理代码。
使用fmdb可以参考github上的项目说明文档: https://github.com/ccgus/fmdb
4.Core Data
暂时还未使用过,待研究学习。