• 应用沙盒(Application Sandbox)


    一、应用沙盒目录  

    应用沙盒包含多个目录:

      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

  • 相关阅读:
    matcaffe的blob维度顺序
    ftp同步代码
    SpringCloud的微服务网关:zuul(实践)
    SpringCloud的微服务网关:zuul(理论)
    SpringCloud的服务消费者 (二):(rest+feign/ribbon)声明式访问注册的微服务
    SpringCloud的服务消费者 (一):(rest+ribbon)访问注册的微服务
    SpringCloud的服务注册中心(二)注册中心服务端和两个微服务应用客户端
    Jetty入门(1-3)Eclipse集成gradle-Gretty插件或maven-jetty插件运行应用
    HTTP协议扫盲(三)HTTP协议的请求头列表和分类描述
    Jetty入门(1-2)eclipse集成jetty插件并发布运行应用
  • 原文地址:https://www.cnblogs.com/benbenzhu/p/3584616.html
Copyright © 2020-2023  润新知