iOS - 沙盒与目录
NSFileManager
NSBundle
Class Cluster
采用Tagged Pointer的字符串
NSPathStore
iOS证书ipa包重签名探究
url 结构
1. iOS 沙盒结构
App 安装时候,在系统分配的沙盒中创建一系列的容器(Container)。例如:Bundle Container/ Data Container/ iCloud Container

mobile/Containers/Data/Application

2. 沙盒固定的文件夹
根据上图所示:
- MyApp.app :包含App的编译后的源文件,
不被iTunes备份,不可写。 - Home > Documents :常用用户数据存储目录,
会被iTunes备份,可读写。存储用户重要数据或其他定期备份的信息。 - Home > Library :有2个子目录,存储所有非用户数据的根目录,
会被iTunes备份,可读写。
Home > Library > Caches :缓存文件。
Home > Library > Preferences :偏好设置文件,应该使用NSUserDefaults类来设置偏好。
Preferences :修改配置文件时,若后没有调用synchronize同步数据,系统会根据 I/O 情况不确定什么时候执行保存。 - Home > tmp :临时数据,应用重启后数据不存在。
使用场景:load图片时,一般会把下载文件临时存储到tmp目录下,然后拷贝到Caches目录下,拷贝完成删除临时文件。保证数据原子性;例如方法:writeToFile:,常常设置 atomically 参数设置为 YES 来达到目的。
3. XXX.app 详情
使用文件控制器获取 XXX.app 中的路径。
NSFileManager * fileManager = [NSFileManager defaultManager];
NSDirectoryEnumerator * _AppDirectoryEnumerator = [fileManager enumeratorAtPath:[NSBundle mainBundle].bundlePath];
NSLog(@"XXX.app: %@\n",[NSBundle mainBundle].bundlePath);
while (file = [_AppDirectoryEnumerator nextObject])
{
[_AppFileNameArray addObject:file];
NSLog(@"文件: %@",file);
}
打印
XXX.app: /var/containers/Bundle/Application/E3EEA2A6-B357-47C6-B4DE-EEFB6A88C4DC/ceshi1.app
文件: Base.lproj
文件: Base.lproj/LaunchScreen.storyboardc
文件: Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib
文件: Base.lproj/LaunchScreen.storyboardc/Info.plist
文件: Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib
文件: Base.lproj/Main.storyboardc
文件: Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib
文件: Base.lproj/Main.storyboardc/Info.plist
文件: Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib
文件: Info.plist
文件: META-INF (软件卸载信息)
文件: PkgInfo (软件包信息)
文件: _CodeSignature (签名文件)
文件: _CodeSignature/CodeResources
文件: XXX (XXX.app 的名称)
文件: embedded.mobileprovision (配置文件)
4. Data Container
Data Container 路径
NSLog(@"%@",NSHomeDirectory());
打印:
/var/mobile/Containers/Data/Application/2E8F92F6-B558-4B37-8DFE-6AB8A2AAD2D4
Data Container 下的各种路径地址(方法1)
NSDirectoryEnumerator * _DataDirectoryEnumerator = [fileManager enumeratorAtPath:NSHomeDirectory()];
NSString * file; // 声明路径文件名
while (file = [_DataDirectoryEnumerator nextObject])
{
[_DataFileNameArray addObject:file];
NSLog(@"文件: %@",file);
}
打印:
文件: Documents
文件: Library
文件: Library/Caches
文件: Library/Caches/Snapshots
文件: Library/Preferences
文件: tmp
Data Container 下的各种路径地址(方法2)
NSLog(@"%@",[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]);
NSLog(@"%@",[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]);
NSLog(@"%@",[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]);
NSLog(@"%@",NSTemporaryDirectory());
打印:
/var/mobile/Containers/Data/Application/5B50A75B-16F8-4501-9AF2-60FA423CBCBC
/var/mobile/Containers/Data/Application/5B50A75B-16F8-4501-9AF2-60FA423CBCBC/Documents
/var/mobile/Containers/Data/Application/5B50A75B-16F8-4501-9AF2-60FA423CBCBC/Library
/var/mobile/Containers/Data/Application/5B50A75B-16F8-4501-9AF2-60FA423CBCBC/Library/Caches
/private/var/mobile/Containers/Data/Application/5B50A75B-16F8-4501-9AF2-60FA423CBCBC/tmp/
~ps:~ 为何没有 Home > Library > Preferences 目录方法?因为 Preferences 目录主要存储用户的偏好设置,可以通过NSUserDefault对象通过KVC进行访问,因此不需要方法获取目录。
iOS - 沙盒与目录的更多相关文章
- IOS沙盒Files目录说明和常用操作
Ios沙盒目录清单 1 Documents 用于存储用户生成的文件.其他数据及其他程序不能重新创建的文件,默认文件通过iCloud自动备份.如果不需要iCloud备份,则设置标记 NSURLIsExc ...
- iOS沙盒目录结构解析
iOS沙盒目录结构解析 原文地址:http://blog.csdn.net/wzzvictory/article/details/18269713 出于安全考虑,iOS系统的沙盒机制规定每个应 ...
- iOS 沙盒目录结构介绍
iOS系统中,每个应用都有自己的沙盒,且应用只能访问其对应的沙盒目录下面的文件.当然,在用户授权的情况下,应用也可以访问其他目录下面的文件.比如,用户授权情况下,应用可以访问相册.通讯录.在开发中,经 ...
- iOS面试题--Model层--沙盒的目录结构是怎么样的?各自一般用于什么场合?
沙盒的目录结构是怎么样的?各自一般用于什么场合? 一.iOS沙盒机制 iOS的应用只能访问为该应用创建的区域,不可访问其他区域,应用的其他非代码文件都存在此目录下,包括图片,属性文件plist,bun ...
- iOS学习7:iOS沙盒(sandBox)机制(一)之获取沙盒路径及目录说明(转)
转:http://my.oschina.net/joanfen/blog/151145 一.iOS沙盒机制 iOS的应用只能访问为该应用创建的区域,不可访问其他区域,应用的其他非代码文件都存在此目录下 ...
- iOS沙盒(sandbox)
iOS沙盒 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,默认下iOS应用只能访问自己的沙盒 extenaion是iOS8新开放的一种对几个固定系统区域的扩展机制,它可以在一定程度上弥补 ...
- IOS 学习之 iOS沙盒(sandbox) 介绍 沙盒机制 文件操作(一)
1.iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...
- iOS 阶段学习第25天笔记(iOS沙盒机制介绍)
iOS学习(OC语言)知识点整理 一.iOS沙盒机制介绍 1)概念: 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒 ...
- iOS沙盒机制介绍,Block 的介绍
一.iOS沙盒机制介绍 (转载) 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访 ...
随机推荐
- sql优化阶段性总结以及反思
Sql优化思路阶段性心得: 这段时间的优化做了好几个案例,其实有很多的类似点,都是好几张大表的相互连接,然后执行长达好几个小时,甚至都跑不出来. 自己差不多的思路就是Parallel full tab ...
- java实现支付宝接口--文档..转载
//实现java支付宝很简单,只要从支付宝官方下载 http://help.alipay.com/support/index_sh.htm下载程序,配置一下参数就OK了: 1.先到http:/ ...
- Linux下查找文件:which、whereis、locate、find 命令的区别
我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索.which 查看可执行文件的位置,通过环境变量查whereis 查看文件的位置,通过数据库查,每 ...
- python2不同版本安装json模块
1.常用json库主要有json-py和simplejson 1) json-py 包含json和minjson,用法一样 Python (#, Jan , ::) [GCC (Red Hat -)] ...
- mvn常用命令
1. mvn compile 编译源代码 2. mvn test-compile 编译测试代码 3. mvn test 运行测试 4. mvn package 打包,根据pom.xml打成war或ja ...
- 【转】SVN提交一般原则
写在前面: 最近, 跳槽了. 来到了一家感觉QIAN景不错的创业公司. 由于是开始, 规模比较小, SVN的管理工作, 也有我来承担. 今天发生了一些相当不愉快的事情, 就是因为一个同事, ①签入代码 ...
- Windows10 会不会成为微软的新起点?
Because if you change the way you see the world, you can change the world you see. 如果你改变看世界的方式,你就能改变 ...
- ios合并静态库
lipo -create SQY/iOS/iphoneos/libGamePlusAPI.a SQY/iOS/iphonesimulator/libGamePlusAPI.a -output SQY/ ...
- 【WPF系列】Textbox
Style定义实例 给Textbox定义一个阴影效果. <Style x:Key="{x:Type TextBox}" TargetType="{x:Type Te ...
- NOIP模拟赛20161016R1
1.传教士(bishop) 问题描述: panzhili王国的疆土恰好是一个矩形,为了管理方便,国王jjs将整个疆土划分成N*M块大小相同的区域.由于jjs希望他的子民也能信教爱教(”打拳”神教),所 ...