代码的一生是悲催的,辛辛苦苦跑完了生命的全程结果什么也不会带走,所有的数据随着代码的粉身碎骨而灰飞烟灭。正如古人所曰数据乃身外之物,生不带来,死不带走。古人又曰了:人过留名,雁过留声。代码总想在自己有限的生命中做一些什么来证明自己曾经活过。
幸运的是作为一坨iOS代码至少可以以四种方式把自己的数据保存下来。
1. iOS文件系统的四种数据持久化机制:
- Property lists
- Object archives(or archiving)
- SQLite3 (iOS 嵌入式关系数据库)
- Core Data( Apple 提供的数据持久化工具)
顺便提一下,除了上面列出的四种常用的数据持久化方式外,在iOS中,传统的C语言中文件读取函数如 fopen(), fprint()也是可用的。
2. 沙盒机制
- 在了解数据持入化这前有必要了解一下iOS的沙盒机制。
在iOS 中每个程序都有属于自己的数据存储空间,不同程序之间没有相互访问的权限,每个程序只能操作和维护属于自己空间的数据。在模拟器中这个文件夹位于/Users/bohan ( 用户名)/Library/Application Support/iPhone Simulator/5.1(模拟器版本号)/Applications/9D53787B-A796-40DB-A965-A4D5D7163703(程序的GUID)/
目录对应三个子目录依次是
Documents: 程序中除了基于NSUserDefault 的偏好设置其他所有的数据存储在此目录中
Library: 基于NSUserDefault 的偏好设置保存在些目录中
tmp: 用来保存程序运行时的一些临时文件,当通过iTunes同步时此目录中的文件不会被同步。但是程序必需主动删除不再使用的临时文件以节约空间。
- 获取文档目录
-
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsDirectory = [paths objectAtIndex:0];
系统常量 NSDocumentDirectory 表示查找的是document目录, NSUserDomainMask是指查找的范围是所在程序的沙盒(在 Mac OS X中这个常量代表要查找用户的根目录)。
- 获取临时文件目录
NSString *tempPath = NSTemporaryDirectory();