Apple官方文档翻译之iOS 文件管理系统

基本的文件系统


    在OSX 和iOS 中的文件系统是为了处理持续性存储数据文件,程序包,这些文件和它们的操作系统紧密的联系着。因此,文件系统是被所有线程使用最基本的资源之一。

    OSX和iOS文件系统都是基于UNIX文件系统的,连接到计算机的磁盘——不管是物理方式直接连接还是通过网络方式间接连接到计算机——腾出空间来创建一个单一的文件集合。由于文件数量是数以万计的,文件系统用目录来创建了一个多层级关系的组织,尽管这些基本目录的结构和OSX、IOS 的目录结构相似,但每个系统组织的应用和用户数据方式不同。

    在你写代码和文件系统交互之前,你应该首先要明白一点关于文件系统的组织结构和规则然后才在你的代码中使用,除了那写基本的规则之外,你不能在你没有合适安全使用权限的目录下面创建文件,应用也是被期望成为一个’好公民“能把文件放在合适的位置。文件的存放取决于所在的平台,但是首要的目标是确保用户的文件仍然很容易被发现,文件代码内部使用要远离用户的方式。


关于iOS文件系统


iOS文件系统是面向应用运行的,为了保持系统的简化,用户的iOS设备不能直接访问文件系统,app是被期望遵守这些惯例饿的。


每个app都是一个’小岛’

    一个iOS应用程序与文件系统的交互式通常是被限制在沙盒目录里面的,安装一个新的app期间,安装器为这个app创建了很多的容器,每个容器都扮演了一个特殊的角色。包容器包含了应用程序包,而数据容器包含了应用和用户数据,app可能也会请求访问额外的容器——例如,在运行时访问云容器。

这些容器是构成app文件系统的关键点,图一展示的是app的沙盒 




(app名字:coreText)

这里是我打印的一个文件路径:

//包容器 程序包里面的资源文件可以在这 里面的到

 NSString *bundlePath = [NSBundle mainBundle].bundlePath;

//数据容器

 NSString *DataContPath = NSHomeDirectory();


DataContPathNSPathStore2 *@"/var/mobile/Containers/Data/Application/0236271C-73D3-4025-89C3-DAC385B05CFE"


bundlePath__NSCFString *@"/var/mobile/Containers/Bundle/Application/F24A7EF4-0247-416F-8026-C71CEA002DA4/core Text.app"


由于在沙盒里面,app通常是被禁止访问或创建文件在他所属的容器外面,但也有列外,当app掉用了系统的公共接口来访问一些东西,例如用户联系或者音乐,在这些情况下,系统框架处理任何文件相关操作都需要读或者适当修改数据库。


iOS标准目录:文件所在地

出于安全目的,iOS app很多写数据的地方都被限制了,当一个app被安装在设备上(从苹果商店或者iTunes),系统会为app创建很多容器,这些容器代表了app的所有,包含了app可以直接访问的任何东西,表1-1列表是在容器里面的一些重要的子目录。

appName.app:这是app包,这个目录包含了这个app和所有的资源,你不能在这个目录下面进行写操作,为了防止被篡改,这个包路径在安装的时候就会被签名,写到这个路径下面改变了签名你的app会被阻止启动,获取存储在应用程序包中的任何资源的只有读访问权限,

Documents/:使用此目录来存储用户生成的内容,这个目录下的内容可以被用户文件共享,因此,这个目录应该只包含你希望公开的文件。

Documents/Inbox:用这个目录来访问app需要被外部实体打开的文件,特别的,邮件程序将与您的应用程序相关联的电子邮件附件在该目录中。

你的app可以读和删除文件在此目录下,但是不能创建新的文件和对存在的文件进行写操作,如果用户试图编辑这个目录下面的文件,在做改变之前必须移动这个目录。

Library/:这是个高层次的目录文件,没有用户数据的文件,你经常放文件在很多标准子目录中,iOS app通常用这个作为缓存和应用支持的子目录,同时你还可以自定义子目录。

tmp/:这个目录是用来写一些不需要持久保持的临时文件,你的app在不在需要这个目录下的文件时应该将文件移除。然而系统可能在app没有运行的情况下清除这个目录。


一个iOS app可以在Documents ,Library和tmp目录下面创建子目录;


你应该把app的文件放在哪?

为了避免同步和备份过程对在iOS设备上占用很长时间,你可以选择把文件放在什么位置,对于存储大文件的app可以减少备份到iTunes和icloud进程的时间,这些app会耗尽很大数量的有效用户存储空间,鼓励用户删除或者禁止app数据备份到icloud。


1、用户数据存放在Documents/下面,用户数据通常包含任何你想公开给用户的文件——你可以让用户创建、倒入、删除或者编辑.对于绘画类app,用户数据包括用户创建的绘制文件,对于文本编辑类app,包括了文本文件,媒体播放器app甚至可以包涵用户下载的视频或者音乐。

2、把支持app的文件放在Library/Applictation suport目录下,通常情况下,这个目录包含对用户隐藏但app运行使用的文件,这个目录也可以包涵数据文件,配置文件,模版和从程序包里面加载的修改版本的资源。


3、上述两个路径默认会被备份,但是也可以通过调用-[NSURL setResourceValue:forKey:error:] 方法用NSURLIsExcludedFromBackupKey 键来拒绝备份,任何可以被创建和下载的文件都应该拒绝备份,这个规则对于大型的媒体文件很重要,如果你的应用下载音频或者视频文件,确保它们没有被备份。

4、临时数据放在tmp/目录下

5、缓存数据存放在Library/Caches目录,缓存数据可以被任何比临时数据持久时间长达数据使用,但是不能是支持文件,通常,应用不需要缓存数据来正确操作,但可以用缓存数据来改善性能,缓存数据包含数据库缓存文件和下载的内容,注意当系统释放磁盘空间的时候缓存目录可能会被删除,因此你的应用必须在需要这些数据的时候能创建和下载。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值