数据持久存储到iPhone的文件系统三种不同机制:属性列表、对象归档、嵌入式数据库SQLite3(这三种是最简单最常用的方法,还可以选用传统的C I/O调用读取和写入数据,也可以使用Cocoa的低级文件管理工具)。

每个应用程序都有自己的/Documents文件夹(但Apple应用程序除外,比如说Settings)并且应用程序仅能读取各自的/Document目录中的内容。

Library/Application Support/iPhoneSimulator/User/Application就是iPhone存储应用程序的文件夹,里面有一系列文件夹和文件,名称是较长的字符串,都是Xcode自动生成的,每一个文件夹都包含一个应用程序及其支持的文件夹。.sb文件包含仿真器用于启动具备相同名称的程序的设置。可以找到构架的应用程序及其支持的3个 文件夹:Documents、Library、和tmp。数据存储在Documents中(基于NSUserDefaults的首选项设置除外,它在Library/Preferences文件夹中)。tmp目录供应用程序存储临时文件。当iPhone执行同步时,iTunes不会备份/tmp中的文件,但当不需要这些文件时,应用程序需要负责删除/tmp中的文件,以避免占用文件系统的空间。
如果用SQLite3,将创建一个数据库文件,并让它负责存储和检索数据。使用其他两种持久性机制,即属性列表和归档,需要考虑是将数据存储在一个文件中,还是多个文件中。

使用单个文件,首先创建一个根对象,通常是NSArray或NSDictionary,但也可以让根对象基于某个自定义类。接下来使用程序数据填充根对象。需要保存时,代码会将该根对象的全部内容重新写入单个文件。应用程序在启动时会将该文件的全部内容读入内存,并在退出时注销全部内容。缺点在于必须将所有应用程序数据加载到内存中,并且必须将所有数据全部写入文件系统,即使更改再小也是如此。
使用多个文件,允许应用程序仅加载用户请求的数据(另一种形式的延迟加载),当用户进行更改时,只需保存更改的文件。允许在收到内存不足通知时释放内存,因为可以刷新用于存储用户当前未查看的数据的任何内存,并且只需在下次需要时从文件系统重新加载即可。缺点是大大增加了应用程序的复杂性。
SQLite3在存储和检索大量数据方面非常有效,还能够对数据进行复杂的聚合,与使用对象执行这些操作相比,获得结果的速度更快。iPhone没有任何ORM库或工具,需要设计自己的方法将数据库中的信息映射到对象以及再映射回来。