一、NSBundle目录和沙盒路径对比
沙盒目录:
/Users/mrwangxiansen/Library/Developer/CoreSimulator/Devices/A10128A9-D187-4E86-A1AF-43523AC2A4DE/data/Containers/Data/Application/B65FB2D7-C064-4750-AF18-3C4C50B6DAF6
bundle目录:
/Users/mrwangxiansen/Library/Developer/CoreSimulator/Devices/A10128A9-D187-4E86-A1AF-43523AC2A4DE/data/Containers/Bundle/Application/FC9EF00F-8A12-4E4B-908F-6C74F6E9BB96/CUSSenderExample.app
上面两个路径加黑的路径是xcode的模拟器的containers路径,后面的部分分别是所有app的bundle文件的主目录和所有app的数据主目录。
二、沙盒
程序每次编译都会生成一个新的沙盒路径,之前生成的沙盒被删除。
获取沙盒路径:
NSString *path = NSHomeDirectory();
Documents/:我们可以将应用程序的数据文件保存在该目录下。不过这些数据类型仅限于不可再生的数据,可再生的数据文件应该存放在Library/Cache目录下。该目录会被iTunes同步,可通过
// 检索指定路径
NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
// 第一个参数指定了搜索的路径名称,NSDocumentDirectory表示是在Documents中寻找.NSCacheDirectory的话就是在cache文件中寻找
// 第二个参数限定了文件的检索范围只在沙盒内部.其意义为用户电脑主目录.也可以修改为网络主机等.最后一个参数决定了是否展开波浪线符号.展开后才是完整路径,这个布尔值一直为YES.
// NSSearchPathForDirectoriesInDomains返回值为一个数组,在iphone中由于只有一个唯一路径(相对OC而言),所以直接取数组第一个元素即可.
获取到路径地址。
Documents/Inbox:外部应用程序需要访问的文件保存在该目录下,例如系统的邮件 App 要使用到当前应用程序的附件资源就存放在这个目录。沙盒机制是不允许外部程序访问沙盒中的文件,因此苹果的解决方案是将文件拷贝一份到应用的 Documents/Inbox 目录下。该目录只读,不可修改,会被 iTunes 同步。
Library/:存放默认设置或其它状态信息。除了 Caches 子目录外其他目录都会被 iTunes 同步。
Library/Preferences:NSUserDefaults 写的设置数据都会保存到该目录下的一个 plist 文件中,会被 iTunes 同步。
Library/Caches: iTunes 不会同步此文件夹,并且当系统空间不足的时候会被清理,适合存储体积大,不需要备份的非重要数据。可通过
NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
获取到路径地址。
tmp/:各种临时文件,保存应用再次启动时不需要的文件。而且,当应用不再需要这些文件时应该主动将其删除,因为该目录下的东西随时有可能被系统清理掉,目前已知的一种可能清理的原因是系统磁盘存储空间不足的时候。可通过
NSString *tmpPath = NSTemporaryDirectory();
获取到路径地址。
三、NSBundle
该目录包含了应用程序本身的数据,包括资源文件和可执行文件等。整个目录是只读的,并且不会被 iTunes 同步。可通过
NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
获取到路径地址。
网友评论