iOS 沙盒简介 路径获取

1.沙盒结构

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

iOS 沙盒简介 路径获取_第1张图片
sandbox.png

  • Documents:应用中用户数据可以放在这里,但是基于NSUserDefaults 的首选项设置除外,iTunes 备份和恢复的时候会包括此目录.
  • Library/Caches:存放缓存文件,iTunes 不会备份此目录,此目录下文件不会在应用退出删除.
  • tmp:存放临时文件,iTunes 不会备份和恢复此目录,此目录下文件可能会在应用退出后删除.

2.如何访问:

 NSString *path = NSHomeDirectory();

上面的代码得到的是应用程序目录的路径,
在该目录下有三个文件夹:DocumentsLibrarytemp以及一个.app包。
该目录下就是应用程序的沙盒,应用程序只能访问该目录下的文件夹。


NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
FOUNDATION_EXPORT NSArray *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();

参考资料:

  • NSFile​Manager
  • iOS 沙盒目录结构及正确使用 -
  • 苹果官方文档

你可能感兴趣的:(iOS 沙盒简介 路径获取)