1.沙盒结构
出于安全考虑,iOS 应用都只能访问自己沙盒内的文件,想要其它权限都要预先申请。

sandbox.png
-
Documents:应用中用户数据可以放在这里,但是基于NSUserDefaults 的首选项设置除外,iTunes 备份和恢复的时候会包括此目录. -
Library/Caches:存放缓存文件,iTunes 不会备份此目录,此目录下文件不会在应用退出删除. -
tmp:存放临时文件,iTunes 不会备份和恢复此目录,此目录下文件可能会在应用退出后删除.
2.如何访问:
NSString *path = NSHomeDirectory();
上面的代码得到的是应用程序目录的路径,
在该目录下有三个文件夹:Documents、Library、temp以及一个.app包。
该目录下就是应用程序的沙盒,应用程序只能访问该目录下的文件夹。
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
FOUNDATION_EXPORT NSArray<NSString *> *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);
此方法用于查找目录,返回指定范围内的指定名称的目录的路径集合
已经习惯了苹果爸爸的黑魔法,Cocoa 最糟糕的 API 之一。
它返回了一个包含用户文档目录作为第一个元素的数组,
还好 NSArray -firstObject 可以轻松拿到地址。
参数:
-
NSSearchPathDirectory directory要搜索的目标目录 比如NSDocumentDirectory表明我们要搜索的是Documents目录。 -
NSSearchPathDomainMask domainMask指定搜索范围NSUserDomainMask当前应用沙盒。 -
BOOL expandTilde是否全部展开,不展开会有~比如~/Library/Caches酱紫。
3.一些常见用法:
// 获取沙盒主目录路径
NSString *homeDir = NSHomeDirectory();
// 获取Documents目录路径
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
// 获取Library的目录路径
NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
// 获取Caches目录路径
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
// 获取tmp目录路径
NSString *tmpDir = NSTemporaryDirectory();