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中已经开放访 ...
随机推荐
- 项目管理过程组和知识领域表(PMBOK2008)
项目管理过程组和知识领域表(PMBOK2008) 知识领域 项目管理过程组 启动过程组 规划过程组 执行过程组 监控过程组 收尾过程组 4. 项目整合管理 4.1 制定项目章程 4.2 制定项目管理 ...
- javascript - 享元模式
享元模式笔记 运用共享技术有效的支持大量的细粒度对象,避免对象间拥有相同内容造成多余的开销 享元模式主要还是对其数据.方法共享分离,它将数据和方法分成内部数据.内部方法和外部数据.外部方法. 内 ...
- webapi 控制器接收POST参数时必须以对象的方式接收
webapi 控制器接收POST参数时必须以对象的方式接收
- Spring IOC/DI和AOP原理
一 IOC/DI 1. 概念机原理 IOC: Inversion of Control(控制反转)是一种设计思想,就是容器控制应用程序所需要外部资源的创建和管理,然后将其反转给应用程序.对象及其依赖对 ...
- wordpress-4.4.1 数据库表结构解析
wordpress-4.4.1.zip 安装包 SQL结构 : wp_commentmeta :文章评论额外信息表. CREATE TABLE IF NOT EXISTS `wp_commentm ...
- 【转】深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
[原文]:http://www.jb51.net/article/39432.htm 1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. ...
- 安装 Visual Studio Web Tools 的奇怪问题
安装Microsoft ASP.NET 5 RC 1 时提示 0x80070005 - 拒绝访问 日志文件为 [1968:3F64][2015-11-20T10:08:36]i010: Launchi ...
- C#性能优化考虑的几个方向
装箱与拆箱 ArrayList's vs. generic List for primitive types and 64-bits 类型转换 GC 注意SOH对象应该较快,避免内存泄漏 注意LO ...
- WPF系列-CheckBox
自定义样式1 效果: 代码: <!-- CheckBox的样式 --> <Style TargetType="{x:Type CheckBox}"> < ...
- hdu1521 排列组合(指数型母函数)
题意: 有n种物品,并且知道每种物品的数量ki.要求从中选出m件物品的排数. (全题文末) 知识点: 普通母函数 指数型母函数:(用来求解多重集的排列问题) n个元素,其中a1,a2, ...