iOS-iOS文件系统基础

来源:互联网 发布:淘宝上怎样找高仿耐克 编辑:程序博客网 时间:2024/05/17 07:08

1.介绍
OS X和iOS文件系统都是基于UNIX文件系统.尽管iOS和OS X的基本目录结构是相似的,但他们管理apps和用户数据的方式是不同的.
一个iOS程序和文件系统的交互一般只被限制在程序的沙盒目录中.在新的程序的安装过程中会创建有各种用途的容器.bundle盛放bundle,数据容器盛放数据.数据容器还包括一系列目录来管理数据.还有其他的容器例如在运行时可能会创建的iCloud容器.
关系如下图:
这里写图片描述
由于程序是运行于沙盒中,所以一个app一般禁止在沙盒外部访问和创建文件.一个例外是:当应用程序使用公共系统接口来访问用户的通讯录或音乐等,在这种情况下,系统框架会管理所有的需要的相关文件操作,读或修改.

2.iOS标准目录:文件存储位置
为了安全考虑,一个iOS应用只能在特定的一些地方写数据.当app安装到设备上时,iTunes会为app创建一些容器.这些容器就是程序可以访问和存储东西的范围.
下面这张表描述了容器中一些重要的子目录及其使用说明,也描述了每个子目录的访问限制和该子目录的内容是否能够被iTunes备份.
Table1-1iOS app常用目录
1>AppName.app
描述:这是程序的bundle,这个目录包含了程序自身和其所有的资源.你不能向其做写操作.为了防止篡改,bundle已经在安装时进行了签名.对这个目录进行写操作会改变其签名并会阻止程序启动.然而,你可以对该bundle中存储资源只读.更多信息参考:ResourceProgrammingGuide.该目录中的内容不会被iTunes备份,但是iTunes会对从AppStore上买的app进行一个初始的同步.
2>Documents/
使用这个目录来存储用户产生的数据.该目录的内容可以与用户共享;所以该目录只应该包括你想暴露给用户的文件.目录的内容会被iTunes备份.
3>Documents/Inbox
使用这个目录访问被外部实体请求打开的文件.例如,邮箱程序将与应用程序有关的附件存放在这个目录.文档交互控制器也会把文件放到这里.你的程序可以读或删该目录的文件但是不能创建新文件也不能向现存文件写.如果用户想要编辑这个目录的文件,你的程序需要首先将该文件移出此目录.该目录会被iTunes备份.
4>Library/
这个是非用户数据文件的顶级目录.你通常把文件放到其中一个标准子目录中.iOS程序通常使用Application Support和Caches子目录;你也可以创建自定义的子目录.对于那些不想暴露给用户的文件使用Library子目录.这些目录不能用于用户数据文件.除了Caches的子目录,其他Library的内容会被iTunes备份.
更多关于Library目录和它的常用子目录参考:The Library Directory Stores App-Specific Files(page21).
5>tmp/
此目录用来写下次启动程序不需要保存使用的临时文件.当该目录中的文件不再需要时要删除.在程序没在运行时,系统会清空这个目录.这个目录内容不会被iTunes备份.
在实际情况中,你可能会在Documents,Library,tmp目录中创建子目录来更好地管理文件.

3.你应该将你的App的文件放到哪儿:
1>将用户数据放到Documents/.用户数据是指你想暴露给用户的文件,即你想要用户创建,引入,删除,或编辑的文件.对于一个画图app,用户数据包括用户创建的图像文件;对于一个文本编辑器,它包括文本文件.视频音频APP甚至包括用户下载后看和听的文件.
2>将应用程序创建的支持文件放到Library/Application support/目录.通常,该目录存放APP运行使用的文件但要对用户隐藏.该目录也可以保存数据文件,配置文件,模板和从APP bundle下载的资源更新版本.
3>记住Documents/和Application Support/ 是默认备份的.你可以通过调用[NSURL setResourceValue:forKey:error:]使用键:NSURLIsExcludedFromBackupKey.任何能够再次创建或能下载的文件都不要备份.特别是当对于大型媒体文件时.如果你的应用程序下载了视频或音频文件,你需要确保他们不会被备份.
4>把临时文件放到tmp/.临时数据是无需为其他时间持久化的数据.记得当你不需要他们的时候删除这些文件,这样他们就不会再继续占用设备的空间.系统会在应用不再运行时定期清除这些文件;所以当你的应用退出后不要依赖这些文件来做持久化.
5>把数据缓存文件放到Library/Caches/目录.缓存数据是需要比临时文件保存要长的数据,但长不过支持文件.通常来说,程序并不需要缓存数据就能运行正常,但是有缓存数据会提升运行效果.例如:数据库缓存文件,临时文件,可下载文件.注意系统可能会删除Caches/来释放硬盘空间,所以程序在需要的时候必须能重新创建或下载这些文件.

详细内容请参考链接:
https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW2

0 0
原创粉丝点击