iOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在本应用的文件夹内读取文件,不可以访问其他区域的内容,此区域被称为沙盒。所有的非代码文件都保存在这个地方,比如图片、声音、属性列表和文本文件等。关于沙盒需要提前了解下面的几个要点:
每个应用程序都有属于本应用的沙盒存储空间。
应用程序不能随意跨越自己的沙盒去访问其他的应用程序沙盒的内容。
应用程序向外读写数据都需要经过权限认证。
默认情况下,每个应用的沙盒包含3个文件夹:Documents、Library和tmp。由于沙盒机制的存在,应用只能在这几个目录中读写文件。
Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录。
Library:存储程序的默认设置或其他状态信息,其中又包含了Caches文件夹和Preferences文件夹。
Library/Caches:存放缓存文件,iTunes不会备份此目录,但此目录下文件在应用退出时不会被删除。
Library/Preferences:存放偏好设置的plist文件。
tmp:提供一个即时创建临时文件的地方。
在Foundation框架中提供了用于快速获取沙盒相关路径的方法和函数,可以快速定位应用程序对应的沙盒路径。
// 获取App沙盒路径
NSString *homePath = NSHomeDirectory();
// 获取沙盒中Documents文件夹目录
NSArray *documentsArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [documentsArr objectAtIndex:0];
// 获取Library文件夹目录
NSArray *libraryArr = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryPath = [libraryArr objectAtIndex:0];
// 获取Caches文件夹目录
NSArray *cachesArr = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesPath = [cachesArr objectAtIndex:0];
// 获取tmp文件夹目录
NSString *tmpPath = NSTemporatyDirectory();