应用沙盒(Application Sandbox)

摘要:
与Documents目录不同的是,iTunes不会在同步设备时备份该目录。第一个参数是NSSearchPatchDirectory常量,后两个参数在iOS上会传入两个固定值NSUserDomainMask和YES。例如,要得到应用的Documents目录,可以像如下这样调用NSSearchPathForDirectoriesInDomains函数:NSArray*documentPaths=NSSearchPathForDirectoriesInDomain;NSString*ourDocumentPath=[documentPathsobjectAtIndex:0];注意,NSSearchPathForDirectoriesInDomains的返回值是NSArray对象。NSString*sandboxPath=NSHomeDirecotry();//根据沙盒的全路径,可以得到其下自录的全路径NSString*documentPath=[sandboxPathstringByAppendingPathComponent:@"Documents"];但是与NSHomeDirectory目录名相比,使用NSSearchPathForDirectoriesInDomains更安全。

一、应用沙盒目录  

应用沙盒包含多个目录:

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

免责声明:文章转载自《应用沙盒(Application Sandbox)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇petalinux2019.2 zcu106 build errorVue组件别名及Ctrl跳转组件问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ios版本更新总结

更新思路,获取APP Store 版本号与项目本地版本号对比,如果本地低于商店版本号,就提示用户更新(说明:在上架项目时请保持本地和商店版本号一致,避免检测更新问题被拒) 1.获取商店版本号,代码如下,其中urlString里的id为APP在商店里的id唯一标示 NSString *urlString = @"http://itunes.apple.com...

OC基础 文件管理

OC基础  文件管理 1.文件管理类NSFileManager对象的创建:   NSFileManager *fm = [NSFileManager defaultManager]; 2.文件操作: (1)遍历查看目录下的文件:   a.遍历查看目录下的文件:contentsOfDirectorAtPath:(NSString *)path error:(...

再探NSString

再探NSString NSString应该是oc开发中最常用的一个数据类型了,这次对该类型再进行一次全方位的探索与总结。 NSString本质上属于OC类对象,继承于NSObject,遵守NSCopying, NSMutableCopying, NSSecureCoding协议。 NSMutableString与之类似,唯一不同的是它继承于NSStrin...

iOS应用开发最佳实践系列一:编写高质量的Objective-C代码

      本文由海水的味道编译整理,转载请注明译者和出处,请勿用于商业用途! 点标记语法 属性和幂等方法(多次调用和一次调用返回的结果相同)使用点标记语法访问,其他的情况使用方括号标记语法。 良好的风格: view.backgroundColor = [UIColor orangeColor]; [UIApplication sharedAppl...

iOS 第三方登录之 QQ登录

  一. 首先需要下载腾讯qq登录所需的库,下载地址是http://open.qq.com/ 。 需要用到的有TencentOpenAPI.framework 和TencentOpenApi_IOS_Bundle.bundle,将两者加入工程。 二.下面就来实现QQ第三方登录 1.声明属性,且viewcontroller实现TencentSessionD...

Xcode 沙盒选项

 Capabilities 开启Sandbox权限--转载--https://juejin.cn/post/6844904199688290318 应用开发完成提交到App Store时,必须进行沙盒化。切换到工程target设置Tab的Capabilities中。 第一项就是App Sandbox开关,点击ON,表示应用使用沙盒。 上图的选项的一些解释如...