介绍
- 概念:每个应用拥有自己的应用沙盒,所谓的应用沙盒就是文件系统目录。
- 沙盒文件目录
1. MyApp.app:该目录包含了应用程序本身的数据,包括源文件和可执行文件等。程序启动后,会根据需要从该目录中动态加载代码和资源到内存,用到了懒加载的思想。整个目录是只读的。iTunes不会自动备份该目录
2. Documents:保存应用运行时生成的持久化的数据,数据类型仅限于不可再生的数据,iTunes会自动备份该目录
3. tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除,在没有运行时,系统磁盘存储空间不足时可能自动清理该目录下的文件,iTunes不会自动备份该目录,iPhone重启时该目录下文件丢失
4. Library:存储程序的默认设置和其他状态信息,iTunes会自动备份该目录
5. Library/Caches:存放缓存文件,iTunes不会备份该目录,不会再应用退出删除,一般存放体积大不是很重要的资源
6. Library/Preferences:保存应用的所有偏好设置,使用NSUserDefault写的设置数据都会保存在该目录的plist文件中,iTunes会自动备份该目录
沙盒操作
- 获取应用根目录
NSString *path = NSHomeDirectory();
- tmp
NSString *temPath = NSTemporaryDirectory();
- MyApp.app
NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
- Documents
NSString *DocPath = [NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMash, Yes) objectAtIndex:0];
这里用到的方法如下:
NSArray *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);
- directory:NSSearchPathDirectory类型的enum值,表明我们要搜索的目录名称
- domainMask:NSSearchPathDomainMask类型的enum值,指定搜索方位,这里的NSUserDomainMask表示搜索的方位限制于当前应用的沙盒。
- expandTilde:BOOL值,表示是否展开波浪线"",因为在iOS中的全写形式是/User/UserName,为YES即表示写成全写形式,为NO直接表示为"~"
打开模拟器沙盒目录
- 文件都在个人用户名文件夹下的一个隐藏文件夹********资源库********里
- 设置显示隐藏文件,终端中输入:
显示Mac隐藏文件的命令: default write com.apple.finder AppleShowAllFiles -bool true
隐藏Mac隐藏文件的命令: default write com.apple.finder AppleShowAllFiles -bool false
- 打开资源库后找到/Application Support/iPhone Simulator/文件夹
- 使用NSHomeDirectory()输出根目录,在Finder菜单栏上->前往->前往文件夹->输入输出的根目录回车