一、应用沙盒目录  

应用沙盒包含多个目录:

  1、应用程序包:(application bundle):包含所有的资源文件和可执行文件,并且是只读目录。

  2、Library/Preferences/:存放所有的偏好设置(preferences),iOS的Setting(设置)应用会在该目录中查找应用的设置信息。通过NSUserDefaults类,可以存取Library/Preferences下的设置。iTunes会再同步设备时备份该目录。

  3、tmp/:用于保存应用运行是所需的临时数据,使用完毕后再将响应的文件从该目录删除。应用没有运行的时候,系统也可能会清理该目录下的文件。iTunes不会在同步设备时备份该目录。通过函数NSTemporaryDirectory可以得到应用沙盒下tmp目录的全路径。

  4、Documents/:保存应用运行时生成的需要保留的数据。iTunes同步设备时会备份该目录。当设备故障时,可以从iTunes恢复该目录下的文件。例如,游戏应用可将游戏存档保存在该目录下。

  5、Library/Caches/:保存应用运行时生成的需要保留的数据。与Documents目录不同的是,iTunes不会在同步设备时备份该目录。不备份缓存数据的主要原因是,这些数据的体积可能会很大,会延长同步设备所需的时间。如果数据源是在别处(例如,Web服务器),那么可以将得到的数据保存在该目录。当用户需要恢复设备的时候,可以再从Web服务器下载这些数据。

二、文件路径

  通过C函数NSSearchPathForDirectoriesInDomains可以得到沙盒中得目录的全路径。该函数有三个参数,分别是目录类型、域掩码(domain mask)和一个布尔值(决定是否需要展开路径中得波浪字符“~”)。第一个参数是NSSearchPatchDirectory常量,后两个参数在iOS上会传入两个固定值NSUserDomainMask和YES。例如,要得到应用的Documents目录,可以像如下这样调用NSSearchPathForDirectoriesInDomains函数:

  NSArray * documentPaths = NSSearchPathForDirectoriesInDomain(NSDocumentDirectory,NSUserDomainMask,YES);

  NSString * ourDocumentPath = [documentPaths objectAtIndex:0];

  注意,NSSearchPathForDirectoriesInDomains的返回值是NSArray对象。这是因为该函数源自Mac OS X,在Mac OS X上,可能会有多个目录和传入的参数匹配。但是在iOS上,一个目录类型只会对应一个目录。所以这里可以直接获取数组的第一个NSString对象。

  还可以通过NSHomeDirectory函数得到沙盒自身的路径。注意,系统不允许在沙盒的根目录下创建文件和目录,但是可以在沙盒已有的可写目录下创建新的目录或文件。这些可写目录包括Documents、Library和tmp。可以将目录名加在NSHomeDirectory函数返回的字符创后面,从而拼出目录的全路径。

  NSString * sandboxPath = NSHomeDirecotry();

  //根据沙盒的全路径,可以得到其下自录的全路径

  NSString * documentPath = [sandboxPath stringByAppendingPathComponent:@"Documents"];

  但是与NSHomeDirectory目录名相比,使用NSSearchPathForDirectoriesInDomains更安全。因为新版的操作系统可能会修改目录的目录名,这样也可以避免拼错加上去的目录名。

参考资料:<IOS编程(第2版)》章节:15.1 应用沙盒,P.260

最新文章

  1. ansible的SSH连接问题
  2. 排球积分规则功能说明书(spec)
  3. WebStorm工具插件下载安装
  4. javascript 代码可读性
  5. WebSocket 浅析
  6. [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型
  7. C# GDI在控件上绘图
  8. stm32上的Lava虚拟机开发进度汇报(2)
  9. 提交App,请求Apple加急审核
  10. Android中自定义veiw使用Java中的回调方法
  11. 洛谷P5112 FZOUTSY
  12. 【Java】NO.120.JDK.1.JDK8.1.001-【Java8实战】
  13. 微商城分享 包括app分享 微信分享
  14. MySQL 5.6版本内存占用过高的解决办法
  15. 使用rpm包安装lamp环境
  16. Recover Binary Search Tree leetcode java
  17. .Net Entity Framework Core 用 HasColumnType 配置浮点数精度
  18. mysql 导入导出摘要
  19. ansible 的第一次亲密接触
  20. [BZOJ3678]wangxz与OJ-[Splay一类的平衡树]

热门文章

  1. kubernetes 搭建集群内服务
  2. AlarmManager定时闹钟
  3. python的递归算法学习(3):汉诺塔递归算法
  4. Vue.js入门第一课
  5. HDU 2795.Billboard-完全版线段树(区间求最值的位置、区间染色、贴海报)
  6. 51nod 1873 初中的算术【Java BigDecimal/高精度小数】
  7. [Usaco2010]Chocolate Eating
  8. Maximum Product of Word Lengths -- LeetCode
  9. [xsy2213]tower
  10. MySQL索引,MySQL中索引的限制?