iOS沙盒文件目录介绍

1、APP沙盒目录结构简介

首先奉上苹果官方文档:
https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html
在iOS系统的安全机制,每个APP都有自己的文件目录,且只能访问自己的文件目录。该机制被称为沙盒机制。
沙盒文件结构如下:

 
官方沙盒结构图

最上面的bundle container目录为APP程序的安装目录,在安装后为不可修改状态。(用于存放程序源文件,上架前经过数字签名,上架后不能修改)
中间的data container目录为APP数据存储目录,保存APP运行时需要的数据。
最下面的iCloud container目录为云存储目录,当APP需要iCloud云存储时可以进行访问。

 

2、data container目录介绍

开发中最常用到的是data container目录,系统在安装APP时就为用户创建了几个固定的目录供编程人员使用。初始化时的目录结构如下:


 
data container初始化目录结构
※Documents

保存用户创建的文档文件的目录,用户可以通过文件分享分享该目录下的文件。在iTunes和iCloud备份时会备份该目录。建议保存你希望用户看得见的文件。(不能用于存放缓存文件,否则上架不通过)

※Library

苹果不建议在该目录下保存任何用户相关数据,而是保存APP运行需要的修改数据,当然用户可以根据自己的实际需要进行保存。
该目录下默认有两个子目录,为Caches、Preferences。根据文档还有另外两个系统预存放文件的子目录,分别是Application Support、Frameworks。用户还可以自己根据需要创建相应的目录。该目录下除Caches目录外,在iTunes和iCloud备份时会备份除Caches目录外的其他所有目录。四个目录的预定义如下:
Cache:建议保存数据缓存使用。在用户的磁盘空间已经使用完毕时有可能删除该目录下的文件,在APP使用期间不会删除,APP没有运行时系统有可能进行删除。需要持久化的数据建议不要保存在该目录下,以免系统强制删除。
Preferences:用户偏好存储目录,在使用NSUserDefaults或者CFPreferences接口保存的数据保存在该目录下,编程人员不需要对该目录进行管理。在iTunes和iCloud备份时会备份该目录。
Application Support:建议用来存储除用户数据相关以外的所有文件,如游戏的新关卡。在iTunes和iCloud备份时会备份该目录。
Frameworks:用来保存动态库的文件夹,在iOS系统中已不能使用,该目录可以忽略。

※tmp

苹果建议该目录用来保存临时使用的数据,编程人员应该在数据长时间内不使用时主动删除该目录下的文件,在APP没有运行期间,系统可能删除该目录下的文件。在iTunes和iCloud备份时不会备份该目录。

综上所述,我们保存文件可以保存在Application Support或者Documents目录之下,临时缓存文件则可根据需要保存到tmp和Cache目录下面,由于tmp和Cache目录有可能被系统删除,所有不能保存重要的文件数据。
除系统推荐的目录之外,用户也可以自己创建目录,也可以在推荐的目录下创建子目录进行管理。

3、目录路径获取

获取路径方法如下:

        //沙盒根目录
        NSString *homePath = NSHomeDirectory();
        //document目录
        NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
        //library目录
        NSString *libraryPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;
        //caches目录
        NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
        //application support目录
        NSString *applicationSupportPath = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES).firstObject;
        //preference目录
        NSString *preferencePath = NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES).firstObject;
        //tem目录
        NSString *temPath = NSTemporaryDirectory();

 

posted @ 2020-11-27 13:55  奔跑的小蚂蚁9538  阅读(770)  评论(0编辑  收藏  举报