在ios开发中,数据持久化的方法主要有SQLite3、Core Data、属性列表和对象归档四种。它们只是4种最常用且简单的方法,你可以使用传统的 C语言I/O调用,比如fopen()读取和写入数据,也可以使用Cocoa的底层文件管理工具的软件开发。只不过以上两种方法都需要多写很多代码,并且也没有必要这么做。当然,如果确实需要的话,选择它们是没问题的。
一、应用程序的沙盒机制
IOS沙盒机制(sandbox)能够为应用程序的运行提供很好的安全保障,也可以把沙盒机制理解为一种安全系统,应用程序的所有操作都必须通过该安全系统检测,能够对各种操作进行权限限制。
属性列表、对象归档、SQLite3和Core Data四种数据持久性都涉及一个共性元素,即应用程序的/Documents文件夹。每个应用程序都有自己的/Documents 文件夹并且应用程序仅能读写各自的/Documents 目录中的内容。
我们看一下iOS 上的应用程序是如何组织的,为此,需要看主目录中所包含的Library目录。在Mac OS10.7版本后,苹果默认隐藏了Library文件夹,需要在终端中使用defaults write com.apple.finder AppleShowAllFiles -bool true 命令来显示隐藏功能。
1.若是Xcode5及以下版本,打开一个Finder窗口并导航到主目录。然后在该目录中,向下展开到 Library/ApplicationSupport/iPhone Simulator/。在该目录中,将可以看到针对当前 Xcode 安装所支持的每个iOS版本的目录。例如,进入到表示你的xcode版本所支持的最新版本的目录,此时,你应该看到多个子文件夹,其中一个文件夹名为 Applications。Xcode5中沙盒的路径为:/Users/用户名/Library/Application Support/iPhone Simulator/版本/Applications/对应应用程序文件夹。
2.若是Xcode6及以上版本,同理找到其中一个名为 Applications的文件夹。Xcode6中沙盒的路径为: /Users/用户名/Library/Developer/CoreSimulator/Devices/版本/data/Containers/Data/Applications/对应应用程序文件夹。
虽然此清单代表的是模拟器,但实际设备上的文件结构与此相似。显而易见,Applications 文件夹就是iOS存储其应用程序的文件夹。如果打开Applications 文件夹,可以看到一系列文件夹和文件,它们的名称是较长的字符串。这些名称都是由Xcode 自动生成的全局唯一标识符。
如果打开其中一个应用程序子目录,应该会看到一些比较熟悉的内容。在这里,可以找到你构建的其中一个iOS应用程序及其支持的文件夹,主要有Documents、Library、tmp文件夹。分别用于应用程序的数据存储和临时文件的存储。当 iOS 设备执行同步时, iTunes 不会备份/tmp 中的文件,但当不再需要这些文件时,应用程序需要负责删除/tmp 中的文件,以免免占用文件系统的空间。
二、获取Documents目录
既然我们的应用程序位于一个名称看上去是随机名称的文件夹中,那么如何检索Documents目录的完整路径以便读取和写入文件呢?实际上这非常容易。我们可以利用C语言函数NSSearchPathForDirectoriesInDomain()来查找各种MAC OS系统下的文件夹。
下面是检索 Documents 目录路径的一些代码:
NSArray *fileDocumentsPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDcmainMask, YES);
NSString *documentsDirectory = [fileDocumentspaths objectAtlndex:O];
NSSearchPathForDirectoriesInDomains函数有三个主要参数,第一个参数表示正在查找Documents目录,第二个参数表示搜索的范围局限于沙盒的位置。
我们可以通过在刚刚检索到的路径的结尾附加另一个字符串来创建一个文件名。我们将使用专为该目的设计的 NSString 方法,即 stringByAppendingPath Component:,如下所示:
NSString*filename=[documentsDirectorystringByAppendingPathComponent:@“theFile. Txt”];
完成此调用之后, filename 将包含 theFile.txt 文件的完整路径,该文件位于应用程序的 Documents 目录,我们可以使用 filename 来创建、读取和写入文件。
三、获取tmp目录
获取对应用程序临时目录的引用比获取对 Documents 目录的引用更加容易。名为NSTemporaryDirectory()的 Foundation 函数将返回一个字符串,该字符串包含到应用程序临时目录的完整路径。若要为将存储在临时'目录中的某个文件创建一个文件名,我们首先要找到该临时目录,然后,通过在该路径的结尾附加一个文件名。
作者简介
1.熊阿伟(1983-),男,江西南昌人,讲师,江西现代职业技术学院教师,硕士,主要研究方向:计算机应用、软件。
2.帅志军(1977-),男,江西南昌人,副教授,江西现代职业技术学院教师,硕士,主要研究方向:计算机网络、硬件和软件。