iOS 数据持久化解决方案总结(一)

      代码的一生是悲催的,辛辛苦苦跑完了生命的全程结果什么也不会带走,所有的数据随着代码的粉身碎骨而灰飞烟灭。正如古人所曰数据乃身外之物,生不带来,死不带走。古人又曰了:人过留名,雁过留声。代码总想在自己有限的生命中做一些什么来证明自己曾经活过。

     幸运的是作为一坨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();
posted @ 2012-09-21 16:53  bohan  阅读(384)  评论(0编辑  收藏  举报