iOS沙盒目录结构解析

iOS沙盒目录结构解析

一、应用沙盒

1.1 简介

每个iOS应用都有自己的应用沙盒(就是app的文件系统目录),与其他文件系统隔离。应用必须待在自己的沙盒里,除了系统通讯录等应用能在用户授权的情况下被第三方应用访问,否则不能访问其他应用沙盒

应用沙盒的文件系统目录,如下图所示(假设应用的名称叫ChatDemo):
iOS沙盒目录结构解析_第1张图片

1.2 文件路径

模拟器应用沙盒的根路径在:(username指用户名, 7.1是模拟器版本)
/Users/username/Library(资源库)/Application Support/iPhone Simulator/7.1/Applications

默认情况下,模拟器的目录是隐藏的,要想显示出来,需要在Mac终端输入下面的命令:

defaults write com.apple.finder AppleShowAllFiles YES

输完单击Enter键,退出终端,重新启动Finder就可以了。如果不需要显示,再敲一次命令,设置为NO即可。

二、结构解析

  1. 应用程序包(上图中的ChatDemo):包含了所有的资源文件和可执行文件,程序启动以后,会根据需要从该目录中动态加载代码或资源到内存,并且整个目录是只读的。

  2. Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录。

  3. tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录。

  4. Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据。

  5. Library/Preference:保存应用的所有偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录。

小结一下,目录下的数据需要持久化的有Documents、Library/Caches、Library/Preference。数据需要备份的有Documents、Library/Preference。

三、程序中获取沙盒目录的方法

1、沙盒目录

NSString *home = NSHomeDirectory();

2、Documents

//第一种方法,不建议采用
NSString *documents = [home stringByAppendingPathComponent:@"Documents"];

//第二种方法,常用方法
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

NSDocumentDirectory 表示我们要搜索的是Documents目录。

NSUserDomainMask 表示搜索的范围限制于当前应用的沙盒目录。

YES 代表展开路径中的波浪字符“~”。我们知道在iOS中“~”的全写形式是/User/userName,第三个参数值为YES即表示写成全写形式,为NO就表示直接写成“~”。

NSSearchPathForDirectoriesInDomains 方法返回是的一个数组,但和以上参数相匹配的只有一个元素,所以最后直接写 lastObject 即可。

3、Library/Caches

NSString *doc = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

4、tmp

NSString *tmp = NSTemporaryDirectory(); 

5、Library/Preference
一般通过NSUserDefaults类来存储该目录下应用的设置信息。

以上。

你可能感兴趣的:(ios,文件系统,文件路径,沙盒)