iOS沙盒目录下有四个文件夹。分别是:


-Documents:应该将所有的应用程序数据文件写入到这个目录下。这个目录用于存储用户数据或其它应该定期备份的信息。
-AppName.app:这是应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以您在运行时不能对这个目录中的内容进行修改,否则可能会使应用程序无法启动。
-Library:这个目录下有两个子目录:Caches 和 Preferences
Preferences:包含应用程序的偏好设置文件。您不应该直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置应用程序的偏好.
Caches:用于存放应用程序专用的支持文件,保存应用程序再次启动过程中需要的信息。


-tmp :这个目录用于存放临时文件,保存应用程序再次启动过程中不需要的信息。

对于数据的持久化存储,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

暂时还未使用过,待研究学习。