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中已经开放访 ...
随机推荐
- ansible使用文档
假设A机器上安装ansible yum install ansible vim /etc/ansible/hosts 对每个主机加key认证ssh-copy-id -i ~/.ssh/id_rsa.p ...
- WINDOWS登录系统之前(欢迎界面)运行指定程序脚本服务
方法一:创建可在系统登录之前运行的服务 PS:需要用到两个程序—Srvany和Instsrv,点击 http://pan.baidu.com/share/link?shareid=4111024491 ...
- 【转】Java并发编程:Lock
阅读目录 一.synchronized的缺陷 二.java.util.concurrent.locks包下常用的类 三.锁的相关概念介绍 来自: http://www.importnew.com/18 ...
- appdata
C:/Users/用户名/AppData里面默认有三个文件夹,分别是Local.LocalLow.Roaming,简单地来说,都是用来存放软件的配置文件和临时文件的,里面有很多以软件公司或者软件名称命 ...
- JavaScript的写类方式(6)
时间到了2015年6月18日,ES6正式发布了,到了ES6,前面的各种模拟类写法都可以丢掉了,它带来了关键字 class,extends,super. ES6的写类方式 // 定义类 Person c ...
- Windows共享作为公司文件服务器的案例
1.目录结构 → 主管 部门 → 员工 → Public 2.实现效果 每个部门一个目录 部门主管可以访问自己和部门员工的目录 部门员工只可访问自己的目录 公共目录Public部门所有人都可访问 3. ...
- Java的String中的subString()方法
方法如下: public String substring(int beginIndex, int endIndex) 第一个int为开始的索引,对应String数字中的开始位置, 第二个是截止的索引 ...
- NOIP模拟赛20161016R2
Problem 1 护花(flower.cpp/c/pas) [题目描述] 约翰留下他的N(N<=100000)只奶牛上山采木.他离开的时候,她们像往常一样悠闲地在草场里吃草.可是,当他回来的时 ...
- 洛谷U4859matrix[单调栈]
题目描述 给一个元素均为正整数的矩阵,上升矩阵的定义为矩阵中每行.每列都是严格递增的. 求给定矩阵中上升子矩阵的数量. 输入输出格式 输入格式: 第一行两个正整数n.m,表示矩阵的行数.列数. 接下来 ...
- Oracle 增删改查
Oracle入门案例: 1.创建实体类Student 并重写ToString方法 package cn.happy.entity; public class Student { public Inte ...