一.简介
-
特点
1.沙盒机制是一种安全体系,其原理是通过重定向技术把应用程序生成和修改的文件定向到自身文件夹中.
2.应用程序在安装时,会创建属于自己的沙盒文件,类似一个封闭的储存空间,应用程序只能对自身的沙盒文件进行读写和访问(iOS所有的硬盘缓存数据必须在沙盒内操作). -
目录结构
1.Bundle:储存程序运行前所必要的数据.
2.Data:储存程序运行时所需要的数据.
3.iCloud:储存并同步云端数据.
沙盒目录结构
-
/MyApp.app
1.程序包目录.
2.储存程序运行必须用到的数据资源(音频/视频/图片/编译好的代码/Nib等).
3.只能读取(程序安装时会对程序包进行签名,如程序运行时修改程序包数据,签名会失效,导致程序无法运行).
4.iTunes/iCloud同步不会备份此目录. -
/Documents
1.用户文件目录.
2.储存程序运行中生成的用户数据资源(如从网上下载的图片/音乐等).
3.可以通过系统自带的文件App,访问此路径资源.
4.iTunes/iCloud同步会备份此目录和所有子目录. -
/Documents/Inbox
1.收件箱目录.
2.储存由其他程序请求当前程序打开的文件(其他程序中的某个文件需要用此程序打开,会把那个文件复制一份到此目录).
3.可读取,可删除,不能新建和编辑. -
/Library
1.系统文件目录.
2.储存程序运行中生成的系统数据资源(如文本文件/系统缓存文件等).
3.可创建子文件夹,此目录中的资源不会公开给用户,也不要储存用户相关的数据.
4.iTunes/iCloud同步会备份此目录和所有子目录(Caches子目录除外). -
/Library/Caches
1.系统缓存目录.
2.储存程序再次启动时需要的支持文件/缓存文件和日志文件. -
/Library/Preferences
1.系统偏好目录.
2.储存程序的偏好设置数据资源(Plist文件). -
/Library/SplashBoard
1.系统启动图目录.
2.储存程序启动图缓存数据资源.
3.更新启动图后还是显示旧启动图可尝试清空此目录数据. -
/Library/Application Support
1.系统支持目录.
2.储存除用户相关的数据以外所有的数据资源(如游戏新关卡等).
3.苹果建议此目录中所有数据放在自定义子目录中,子目录名称以程序Bundle Identifier或公司名命名. -
/Temp
1.临时文件目录.
2.储存程序本次运行时所需要的临时数据资源(如调用系统相机拍摄的照片/视频等).
3.iPhone重启时,会自动清除该目录下所有文件,所以照片/视频要及时保存到系统相册中.
4.苹果建议编程人员应该在数据长时间不使用时主动删除该目录下的文件.
4.iTunes/iCloud同步不会备份此目录. -
获取对应目录路径
NSSearchPathForDirectoriesInDomains();
1.查找文件路径函数
2.返回值:是一个数组,只有一个NSString元素,即查找的路径
3.参数1:NSDocumentDirectory 表示需要查找的目录
4.参数2:NSUserDomainMask 表示在用户的主目录中查找
5.参数3:YES 表示返回路径展开
// 沙盒根目录
NSString *homePath = NSHomeDirectory();
// Documents目录
NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
// Library目录
NSString *libraryPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;
// Caches目录
NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
// Preferences目录
NSString *preferencesPath = NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES).firstObject;
// Application Support目录
NSString *applicationSupportPath = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES).firstObject;
// Temp目录
NSString *tempPath = NSTemporaryDirectory();
注:此处列出常用的几种获取目录路径的函数方法,更多详细内容可参看[iOS数据持久化]系列的NSBundle/NSFileManager等.
网友评论