应用沙盒(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
应用沙盒(Application Sandbox)的更多相关文章
- 【计算机】基本概念的理解 —— 沙盒(sandbox)、交互式计算/编程/应用
web scraper:网络铲: scraper:n. 刮刀:铲土机:守财奴: 1. 交互式计算/编程/应用(interactive computing/application/programming ...
- iOS 沙盒(sandbox)结构 使用 实例
声明:该文档是经过自己查找网上的资料以及自己多年的经验后而总结出来的,希望对大家有所帮助,有什么不恰当支出还请大家多指点! iOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为 ...
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】
转的别人的 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成 ...
- iOS沙盒(sandbox)
iOS沙盒 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,默认下iOS应用只能访问自己的沙盒 extenaion是iOS8新开放的一种对几个固定系统区域的扩展机制,它可以在一定程度上弥补 ...
- <转>iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!
原文地址:http://blog.csdn.net/xiaominghimi/article/details/6937097 //——2012-12-11日更新 获取"产品付费数量等于0 ...
- 【转】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程
http://blog.csdn.net/xiaominghimi/article/details/6937097 //——2012-12-11日更新 获取"产品付费数量等于0这个问题& ...
- iOS 文件操作:沙盒(SandBox)、文件操作(FileManager)、程序包(NSBundle)
版权声明:本文为博主原创文章,转载请声明出处:http://blog.csdn.net/jinnchang 1.沙盒机制介绍 iOS 中的沙盒机制(SandBox)是一种安全体系.每个 iOS 应用程 ...
- Swift iOS 文件操作:沙盒(SandBox)、程序包(NSBundle)
1.沙盒机制介绍 iOS 中的沙盒机制(SandBox)是一种安全体系.每个 iOS 应用程序都有一个单独的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒.所有的非代码文件 ...
- 【精】iOS 文件操作:沙盒(SandBox)、文件操作(FileManager)、程序包(NSBundle)
1.沙盒机制介绍 iOS 中的沙盒机制(SandBox)是一种安全体系. 每一个 iOS 应用程序都有一个单独的文件系统(存储空间).并且仅仅能在相应的文件系统中进行操作,此区域被称为沙盒. 全部的非 ...
随机推荐
- JavaWeb响应下载(包含工具类)
纸上得来终觉浅,绝知此事要躬行!今天博主分享是关于javaweb的响应(response)下载 以下是我的Demo: 页面我就粘主要部分的代码 <a href = "${pageCon ...
- Spring Cloud 微服务架构解决方案
1 理解微服务 1.1 软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程. 1.1.1 单体架构 特点: 1.所有的功能集成在一个项目工程中. 2.所有的功能打一个 ...
- [Usaco2010 Feb]Chocolate Buying
题目描述 贝西和其他奶牛们都喜欢巧克力,所以约翰准备买一些送给她们.奶牛巧克力专卖店里 有N种巧克力,每种巧克力的数量都是无限多的.每头奶牛只喜欢一种巧克力,调查显示, 有Ci头奶牛喜欢第i种 ...
- 警告Conversion specifies type'int' but the argument has type'size_t'
代码: #import<Foundation/Foundation.h> int main(int argc,const char * argv[]){ const char *words ...
- 【IntellJ IDEA】idea启动测试类报错Error running 'Test1.test': Command line is too long. Shorten command line for Test1.test or also for JUnit default configuration.
idea启动测试类报错 Error running 'Test1.test': Command line is too long. Shorten command line for Test1.tes ...
- 为什么我不使用Kubernetes的Ingress
为什么我不使用Kubernetes的Ingress 很不幸,据我所知Kubernetes的文档不是很完美,这就是为什么有很多同学在使用它的时候会遇到很多的坑,Ingress这个组件就是这些坑中的一个. ...
- django10 使用自定义标签配置说明
1).在app目录下建目录templatetags[不可改名]目录,然后在该目录下建一个空的__init__.py 2).mytags.py 在templatetags下建一个mytags.py,添加 ...
- vsftp 服务配置篇
在CentOS或者RedHat Linux上有自带的ftp软件叫做vsftpd (very serure ftp) 搭建vsftpd 服务 yum 安装需要用两个包:vsftpd 和 db4-util ...
- cbuffer padding
nx glslc float 起始于 内存位置4x0 ,4x1,4x2 ,4x3.... bit float2 起始于 内存位置2x4x0 ,2x4x1,2x4x2 ,2x4x3.... bit fl ...
- log4j输出日志到flume
现需要通过log4j将日志输出到flume,通过flume将日志写到文件或hdfs中 配置flume-config文件 将日志下沉至文件 a1.sources = r1 a1.sinks = k1 a ...