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. CLR垃圾回收的设计

    作者: Maoni Stephens (@maoni0) - 2015 附: 关于垃圾回收的信息,可以参照本文末尾资源章节里引用的垃圾回收手册一书. 组件架构 GC包含的两个组件分别是内存分配器和垃圾 ...

  2. java实现基于activeMQ的消息推送

    一. 准备工作 1. 点击此下载相关的第三方jar包,并在工程中引用 二. spring配置文件:application.xml <?xml version="1.0" en ...

  3. centos 6.x安装rvm 配置 Ruby开发环境

    rvm是ruby的版本管理工具  还可对ruby进行 安装 卸载 等 1.安装 curl #  sudo yum install  curl #  curl -L  get.rvm.io | bash ...

  4. Redmine 插件安装

    将对应的插件都复制进redmine的plugins 安装对应所需要的GEMS bundle install --without development test rmagick 执行插件合并 bund ...

  5. 【WPF系列】基础学习-WPF架构概览

    引言 WPF从.net framewok3.0加入以来,经历了很多跟新.每次更新都给用户带来了新的功能或者优化性能.下面我们首先看下WPF再.netFramework中的位置,接着介绍下WPF的架构框 ...

  6. MVC架构学习之EasyFirst——快点夸我爱学习~

    iMooc上的MVC教程练习. MVC是PHP基础和进阶的分界点吧应该说是 一.准备 工欲善其事~ 个人环境:windows10+wamp2.5+ZendStudio12: 项目名称:MVCEasyF ...

  7. hdu5317 RGCDQ (质因子种数+预处理)

    RGCDQ 题意:F(x)表示x的质因子的种数.给区间[L,R],求max(GCD(F(i),F(j)) (L≤i<j≤R).(2<=L < R<=1000000) 题解:可以 ...

  8. OpenStack 企业私有云的若干需求(5):主流硬件支持、云快速交付 和 SLA 保证

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

  9. 修改VMware虚拟机里面的显卡名称

    修改VMware虚拟机里面的显卡名称 现在有些蛋疼坑爹的游戏,会检测显卡的名称,如果其中有“Vmware”这类的字眼,就会提示程序在虚拟机中运行而拒绝执行(太不科学了嘛,我要是把我的实机驱动名称也改成 ...

  10. concat() 方法用于连接两个或多个数组。

    我们创建了三个数组,然后使用 concat() 把它们连接起来: <script type="text/javascript"> var arr = new Array ...