最小化写入磁盘数据的数量。文件操作相对比较缓慢,包括写入有限寿命的闪存驱动器。
一些特定的提示帮助你减少与文件相关的操作:
- 写入文件改变的部分或所有的改变,避免因为几个字节写入整个文件。
- 当定义文件格式,频繁写入分组块的内容时,减少每次写入磁盘时块的总数。(原文:When defining your file format, group frequently modified content together to minimize the overall number of blocks that need to be written to disk each time.)
- 如果你的数据是由一组随机访问的结构化内容组成,那么使用Core Date持久化存储或者SQLite数据库,特别是如果你维护的数据可能增长超过几兆字节的情况。
避免写缓存文件到磁盘,唯一的例外是当应用程序退出时,你需要写入一些状态信息,用于app下次启动的时候恢复相同的状态。
App Backup Best Practices
你的应用程序不是必须要以任何方式进行备份恢复的操作。带有激活的iCloud账号的设备会在合适的时间备份他们的app数据到iCloud。对于插入电脑的设备而言,itunes执行增量备份app的数据文件。然而,iCloud和iTunes不备份的内容以下目录:
< Application_Home > / AppName.app
< Application_Data > / Library/Caches
< Application_Data > / tmp
为了防止同步花费太长的时间,你需要有选择的放置哪些文件在你的app的home目录。应用程序存储大文件会使备份到itunes或iCloud的进度变慢。这些app会消耗用户的可用存储空间,这可能会导致用户删除这个app或者禁止app的数据备份到iCloud。记住这一点,你应该按照下面的指南存储应用程序数据:
- 关键数据应该存储在<Application_Data>/Documents directory中。关键数据是无法重新创建的应用程序的任何数据,如用户文档和其他用户生成内容。
- 支持的文件包括应用程序能够下载生成和需要时能重建的文件,储存应用程序支持的文件的位置取决当前的iOS版本。
- 在iOS 5.1和以后,支持文件存储在<Application_Data>/Library/Application Support目录并将NSURLIsExcludedFromBackupKey属性添加到对应的NSURL对象使用setResourceValue:forKey:error:方法。(如果您使用的Core Foundation,使用CFURLSetResourcePropertyForKey函数添加kCFURLIsExcludedFromBackupKey键到CFURLRef对象)。应用这个属性可以防止文件被备份到iTunes或iCloud。如果你有大量的支持文件,您可以将它们存储在一个自定义的子目录并且应用扩展属性。
- 在iOS 5.1和更早的版本,存储支持的文件到<Application_Data>/Library/Caches目录防止它们被备份。
- 缓存数据可以存储在<Application_Data>
/Library/Caches目录,例子文件是你可以把数据库缓存文件、下载的内容(被报纸、杂志、地图等app使用的数据)放在缓存目录。应用程序应该能够很好的处理由于系统释放磁盘空间而删除缓存数据的情况。
临时数据应该存储在
<Application_Data>/tmp目录中。临时数据包含你不需要持久保存的任何数据。当你用过后记得删除这些文件,使他们不继续消耗用户的设备的存储空间。
尽管itunes会备份应用程序包本身,它并不是每次同步的时候都会这样做。当设备下一次同步iTunes的时候在设备上购买的app会被备份。之后的同步操作就不会备份了,除非app包改变(例如应用更新)。
关于怎么在app中使用目录的更多的指导,请参看File System Programming Guide.
来源:oschina
链接:https://my.oschina.net/u/734027/blog/692410