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 - 沙盒与目录的更多相关文章

  1. IOS沙盒Files目录说明和常用操作

    Ios沙盒目录清单 1 Documents 用于存储用户生成的文件.其他数据及其他程序不能重新创建的文件,默认文件通过iCloud自动备份.如果不需要iCloud备份,则设置标记 NSURLIsExc ...

  2. iOS沙盒目录结构解析

    iOS沙盒目录结构解析 原文地址:http://blog.csdn.net/wzzvictory/article/details/18269713     出于安全考虑,iOS系统的沙盒机制规定每个应 ...

  3. iOS 沙盒目录结构介绍

    iOS系统中,每个应用都有自己的沙盒,且应用只能访问其对应的沙盒目录下面的文件.当然,在用户授权的情况下,应用也可以访问其他目录下面的文件.比如,用户授权情况下,应用可以访问相册.通讯录.在开发中,经 ...

  4. iOS面试题--Model层--沙盒的目录结构是怎么样的?各自一般用于什么场合?

    沙盒的目录结构是怎么样的?各自一般用于什么场合? 一.iOS沙盒机制 iOS的应用只能访问为该应用创建的区域,不可访问其他区域,应用的其他非代码文件都存在此目录下,包括图片,属性文件plist,bun ...

  5. iOS学习7:iOS沙盒(sandBox)机制(一)之获取沙盒路径及目录说明(转)

    转:http://my.oschina.net/joanfen/blog/151145 一.iOS沙盒机制 iOS的应用只能访问为该应用创建的区域,不可访问其他区域,应用的其他非代码文件都存在此目录下 ...

  6. iOS沙盒(sandbox)

    iOS沙盒 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,默认下iOS应用只能访问自己的沙盒 extenaion是iOS8新开放的一种对几个固定系统区域的扩展机制,它可以在一定程度上弥补 ...

  7. IOS 学习之 iOS沙盒(sandbox) 介绍 沙盒机制 文件操作(一)

    1.iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...

  8. iOS 阶段学习第25天笔记(iOS沙盒机制介绍)

    iOS学习(OC语言)知识点整理 一.iOS沙盒机制介绍 1)概念: 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒 ...

  9. iOS沙盒机制介绍,Block 的介绍

    一.iOS沙盒机制介绍 (转载) 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访 ...

随机推荐

  1. MySQL有关Group By的优化

    昨天我写了有关MySQL的loose index scan的相关博文(http://www.cnblogs.com/wingsless/p/5037625.html),后来我发现上次提到的那个优化方法 ...

  2. oracle 使用 dbms_lock.sleep暂停存储过程执行

    grant execute on dbms_lock to USERNAME;   dbms_lock.sleep(time)参数单位为秒   create or replace procedure ...

  3. x01.os.20: compile linux-0.11 on the ubuntu

    为什么学习 linux 正如不能依靠美国的 GPS 为我们的导弹指示目标一样,很难想像用运行 windows 的电脑去同美国进行信息战.而朝鲜的网络崩溃,再次警示国人,信息战.网络战离我们并不遥远.l ...

  4. ios合并静态库

    lipo -create SQY/iOS/iphoneos/libGamePlusAPI.a SQY/iOS/iphonesimulator/libGamePlusAPI.a -output SQY/ ...

  5. WPF 3D 知识点大全以及实例

    引言 现在物联网概念这么火,如果监控的信息能够实时在手机的客服端中以3D形式展示给我们,那种体验大家可以发挥自己的想象. 那生活中我们还有很多地方用到这些,如上图所示的Kinect 在医疗上的应用,当 ...

  6. 虚拟机linux上网问题

    VMware中虚拟机网络的三种设置 1.桥接(bridged)(设置上网比较繁琐,但是在嵌入式开发中比较有用)2.NAT(上网比较简单,但是不能用于嵌入式开发中)3.Host only (该模式下仅主 ...

  7. GCC 中零长数组与变长数组

    前两天看程序,发现在某个函数中有下面这段程序: int n; //define a variable n int array[n]; //define an array with length n 在 ...

  8. Counting Bits -leetcode

    introduction: Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num  ...

  9. 深入浅出SQL笔记1–数据和表

    1.数据库的概念及组成 数据库是保存表和其他相关SQL结构的容器. 数据库是由各种各样的表构成的,一个数据库里面的表总是存在相互联系的关系. 数据库内的信息组成了表,表示由行和列构成的,行是一组能够描 ...

  10. mysql表复制和修改部分字段

    今天在工作中,需要造大量的加数据,1000多条数据如果都是手工输入的话,那么我今天不要干别的了,就造吧! 当时手工操作重复的事情,对程序员来说,是一件很丢人的事情,所以就上网查了一下,需要用到两个知识 ...