iOS文件管理File System概述

前言

第一份正儿八经的实习工作--iOS开发。入职第一周,任务是研究一下iOS文件管理相关内容。文件的读写在iOS开发中用到的十分广泛,但是很多情况下开发者没有搞清楚应该如何在本地管理这些文件,以及特定的文件到底应该存储在哪。本文将参考官方文档和网上收集的博客做一个关于iOS文件系统的整理。

 

沙盒机制(sandbox)

iOS app 文件系统都被限制在app本身的沙盒(sandbox),所以一个app(一般来说)无法访问它自身container之外的文件。有一些例外会让app用公共的系统接口去访问外部文件,比如照片、联系人、音乐等。但那些操作由system frameworks掌控。

在安装一个app时,会创建很多的容器(containers),每一个容器扮演不同的角色。主要分为:

  • Bundle Container 
  • Data Container 
  • iCloud Container 

 

 

目录介绍

1. AppName.app 目录:

  • 这是应用程序的程序包目录(app's bundle)。
  • 该目录包含了应用程序本身的数据,包括资源文件和可执行文件等。
  • 整个目录是只读的,可以访问存在app's bundel中的资源文件,不能写入这个目录。
  • 这个目录的内容不会被iTunes备份,但是第一次从App Store购买的app会在iTunes执行同步。

 

2. Documents/:

  • 这个目录用于存储所有用户产生的内容。
  • (仅限于不可再生的文件,可再生的放在Library/Cache目录下)。
  • 这个目录可用于文件分享,因此这个目录应该只包含希望给用户看到的文件。
  • 这个目录下的内容会被iTunes备份。

 

3. Documents/Inbox:

  • 该目录保存你的app由外部应用请求打开当前应用的文件。
  • (比如我们的应用叫A,向系统注册了几种可打开的文件格式,B应用有一个A支持的格式的文件F,并且申请调用A打开F。由于F当前是在B应用的沙盒中,我们知道,沙盒机制是不允许A访问B沙盒中的文件,因此苹果的解决方案是讲F拷贝一份到A应用的Documents/Inbox目录下,再让A打开F。 )
  • 你的app可以读取或者删除在这个目录下的文件,但是不能创建新文件或者写入已经存在的文件中。
  • 如果用户想要编辑这个目录下的文件,你的app要在作出任何改变前移出这个目录。
  • 这个目录下的内容被iTunes备份。

 

4. Library/ :

  • 这是对于不是用户数据文件的顶层目录,通常将文件放在子目录下。
  • iOS apps 经常用 Application support 和 Caches子目录。
  • 你可以创建子目录,用library子目录存不想暴露给用户的文件。
  • Library目录(除了Caches子目录)被iTunes备份。
  • 这个目录下默认有两个子目录:Library/Caches 和 Libaray/Preferences
Library/Preferences:
包含应用程序的偏好设置文件。(您不应该直接创建偏好设置文件,而是应该使用NSUserDefaults类直接存在Library/Preferences目录下 plist中.)
 
Library/Caches :
主要是缓存文件,用户使用过程中缓存都可以保存在这个目录中。这个目录就用于保存那些可再生的文件,比如网络请求的数据。注意,应用程序通常还需要负责删除这些文件。
 
5. tmp/:
  • 这个目录用于存放临时文件。保存应用程序再次启动过程中不需要的信息。
  • app需要删除这些文件当他们不再需要的时候
  • 系统也可能净化这个目录,当app不再运行的时候。
 
 
总结 
为了防止同步或者备份时间太长或者占用太大存储空间,应该选择合适的文件存储的目录。
  • Put user data in Documents/.  包括任何需要暴露给用户的文件,用户可以创建,导入,删除修改这些文件。
  • put app-created support files in the Library/Application support/ 这个目录包含app运行需要的文件,但是这些文件又需要对用户隐藏。 这个目录也可以包括,data files, configuration files, templates and modified versions of resources loaded from the app bundle. 
  • 记住 Documents/ 和 Application Support/会默认被备份。可以用[NSURL setResourceValue:forKey:error:] using the NSURLIsExcludedFromBackupKeykey 防止文件被备份。任何可以被再次创建或者再次下载的文件不应该被备份。特别是大的多媒体文件,不应该被备份。
  • put temporary data in the tmp/ directory. 记住删除这些文件当你使用完,可以节省用户的空间。  
  • put data cache files in the Library/Caches/ directory.  Cache可以比temporary data长,但是比support file短。cache data 并不强制,但是通常使用cache为了提高performance。 例如:database cache file and transient, downloadable content. 注意系统可能会删除Caches/ directory to free up disk space.
 
 
 
posted @ 2015-12-28 20:26  Jasonvivi  阅读(224)  评论(0编辑  收藏  举报