1.沙盒结构
出于安全考虑,iOS
应用都只能访问自己沙盒内的文件,想要其它权限都要预先申请。
-
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();