美文网首页iOS学习笔记
iOS 沙盒及各个目录详解

iOS 沙盒及各个目录详解

作者: 雨天多久就 | 来源:发表于2019-07-21 12:17 被阅读2次
概述

出于安全考虑,一个iOS应用程序对系统文件的交互权限被限制在app的沙盒目录下。
在安装一个新的app的时候,安装程序会在沙盒目录下创建许多容器目录,每个容器目录都有特定的角色。bundle容器目录保存了应用程序的包(主bundle的资源等)。数据容器就是我们开发经常用到的Documents,Library,Temp. 在app运行的时候,app也可能申请额外的容器目录,比如iCloud。


sandbox.png

应用程序通常是被禁止在容器外访问或者创建文件。不过app可以利用公开的系统接口去访问信息比如通讯录,音乐等,一般这些情况,系统库都会提供有专门的方法去访问和修改这些信息。

各个目录的详解

AppName.app 是app的bundle。包含了app以及其所有的资源。
这个目录你不能去进行写操作。为了防止篡改,在app安装的时候就进行了签名处理。一旦你进行了写操作,签名就会修改,app就无法启动。
这个目录的内容不会被itunes或者iCloud进行备份。

Documents 使用该目录主要是保存用户相关的数据。 这个目录下的文件可以通过文件共享提供给用户。因此这个目录下最好只存储app希望公开给用户的数据信息。
这个目录的内容会被itunes或者icloud备份

Documents/Inbox 使用此目录访问外部实体要求您的应用程序打开的文件。比如邮箱里的邮件附件可以放到这个文件目录里。文档controller也可以在这个目录里放文件。但是app只可以访问或者删除这个目录下的文件,不能修改。
这个目录的内容会被itunes或者icloud备份

Library 主要存与用户数据无关的数据(一般是不想共享给用户的数据)。下面有CachesPreferences等子目录。app也可以在这个目录下创建自己的目录。
一般图片缓存,数据缓存都会可以放在这个Caches子目录下。
系统提供的数据存储NSUserDefault生成的plist文件,是放在Preferences目录下的
需要注意的是itunes和iCloud会备份除了Caches文件夹外的其他内容。

tmp 存放一些临时文件。这个文件目录下的数据在app不运行的时候都可能会被清除。因此对于可能还需要用到的数据,需要及早备份,如果不需要可以直接清除掉。
这个目录的内容不会被itunes或者iCloud进行备份。

各个目录存储的默认规则

为了防止设备同步或者备份数据的时候花费很长时间。如果文件过大,会导致同步和备份过程需要很长时间,用户可能会因为过长的等待或消耗过大的空间删除app。因此要合理的存储数据,苹果推荐了以下的存储规则:

  • 将用户数据存在Documents/目录下。通常是你希望共享给用户的数据。比如绘画类的app,存储绘画数据文件;文本编辑器,存储文本信息;音视频app,存储音视频(比如腾讯视频下载的文件,应该都是在这个目录下)

  • Library/Application support/ 主要是存放app正常运行需要用到的信息,比如配置文件等(一般要对用户隐藏)

  • 因为有些文件夹会默认被备份。隐藏对于那些大文件或者不需要备份的文件,可以通过[URL setResourceValue:forKey:error:]方法进行设置不需要备份。
    比如SDWebImage里面就用到了:

[fileURL setResourceValue:@YES forKey:NSURLIsExcludedFromBackupKey error:nil];
  • 临时文件一般都放在tmp目录下。用完的时候记得及时移除。这个目录下不能长久存信息。因为app不运行的时候,系统会阶段性的去清除。

  • Library/Caches/ 主要是存储一下不重要的缓存文件(可再生的)。缓存文件的主要目标是为了提升app的性能。上面括号里写了存储可再生的数据,是因为系统在发现用户的存储空间不够的时候,是会删除这个文件目录来释放空间的。因此查一句话,YYCache的硬盘缓存也是默认存在Caches文件目录下的,因此如果是非常重要的不可再生的数据,记得不要用默认的路径,YYCache支持自定义路径的。

关于AFS

iOS 10.3系统之后,苹果的文件操作系统由HFS+ 改为了 AFS(Apple File System)。AFS在克隆,快照,空间共享等方面做了很大的优化和提示。(注:使用NSFileManager和NSFileHandle将自动使用苹果的AFS)
AFS 具有以下好处:

  • 拷贝文件将不需要额外的硬盘空间。
    如果拷贝的文件有修改,相同的部分还是共用一块内存,不同的部分需要占据一块不同的内存,如下图(虚线上面是HSF+的情况,虚线下面是AFS的情况):


    image.png
  • 磁盘空间的共享
    在HFS+系统的时候,由于一个分区只支持一个volume,对存储设备进行分区设置的时候定义了volume的大小,这样每个volume的剩余空间大小其实已经是固定的。但是AFS系统支持单个区支持多个volume,并允许所有的volume共享剩余的所有空间。当一个volume释放了空间,这块空间可以被另一个volume增大时候使用


    image.png
  • 稀疏文件不分配多余的磁盘空间(具体没有太理解😂,待续吧)

相关文章

  • iOS 沙盒及各个目录详解

    概述 出于安全考虑,一个iOS应用程序对系统文件的交互权限被限制在app的沙盒目录下。在安装一个新的app的时候,...

  • iOS 数据持久化知识汇总(1)—————存储路径

    一、沙盒和沙盒存储路径 1、沙盒是什么 iOS 每个iOS应用都有自己的应用沙盒,应用沙盒就是文件系统目录 。所...

  • 数据持久化存储

    沙盒 iOS程序默认情况下只能访问自己的目录,这个目录被称作沙盒 沙盒结构 沙盒结构主要为 DocumentLib...

  • 沙盒文件

    iOS 持久化沙盒目录结构:出于安全考虑,iOS 系统的沙盒机制规定每个应用都只能访问当前沙盒目录下的文件,也有例...

  • iOS沙盒目录结构解析

    iOS沙盒目录结构解析 出于安全考虑,iOS系统的沙盒机制规定每个应用都只能访问当前沙盒目录下面的文件(也有例外,...

  • iOS 文件操作

    iOS文件(沙盒目录,文件创建、移动、复制等) 目录获取获取沙盒的主目录路径: (NSString *)homeD...

  • ios 沙盒、文件操作与app安装路径

    ios沙盒机制 沙盒包括3个文件夹及app程序打包的目录 Document:程序创建或应用浏览产生的文件数据,当我...

  • 沙盒

    一、iOS沙盒机制介绍(1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 ...

  • Objective-C沙盒结构

    导读: 一、什么是沙盒机制二、沙盒的特点三、沙盒的结构组成四、获取沙盒目录路径 一、什么是沙盒机制 iOS中的沙盒...

  • OC - 沙盒

    导读: 一、什么是沙盒机制 二、沙盒的特点 三、沙盒的结构组成 四、获取沙盒目录路径 一、什么是沙盒机制 iOS中...

网友评论

    本文标题:iOS 沙盒及各个目录详解

    本文链接:https://www.haomeiwen.com/subject/kpdmlctx.html