iOS开发之iOS沙盒数据存储指南

从iOS5有了iCloud后,Apple更新了iOS数据存储指南,以适应iCloud存储,同时增加了”do not back up”不要备份属性,用来指定哪些文件不备份和上传到iCloud。
  iCloud包括了备份,会每天通过WiFi自动地备份用户的iOS设备。在你app home目录的所有东西都会被备份,除了应用bundle本身、缓存目录(caches)和temp目录。已经购买的音乐、应用、书籍、相机胶卷、设备设置、主屏幕和app组织,信息、铃声都会被备份。因为备份是通过无线进行的,并且为每个用户存储在iCloud中,所以应该最好最小化存储在你app中数据数量。大文件会延长备份时间,并消耗用户的iCloud可存储空间。

有效地存储你App中的数据

为了确保备份尽可能快地速高效,应用存储数据应遵循以下指导方针:

  1. 只有那些用户生成的文档或其他数据,或者应用不能重新创建的数据,才应该存储到/Documents目录,并且会被自动地备份到iCloud。
  2. 可以被重新下载或生成的数据,应该存储在/Library/Caches目录下。例如数据库缓存文件、可下载文件(杂志、报纸、地图应用使用的数据等)。
  3. 临时使用的数据应该存储在/tmp目录。即使这些数据不会被iCloud备份,但在使用完这些数据后记得删除它们,这样才不会继续占用用户的设备空间。
  4. 使用“do not back up”属性来指定哪些文件需要保留在设备中(即使在低存储空间情况下)。那些App合适的功能需要在低存储空间时仍需保留可以重新生成,或者用户希望在离线时可以使用的文件,需要使用这个属性。无论哪个目录下的文件(包括Documents目录),都可以使用这个属性。这些文件不会被清除,也不会包含在用户的iTunes或iCloud备份中。由于这些文件一直占用着用户的设备存储空间,应用有责任定期监控和删除这些数据(所以在/Library/Caches目录中文件,即使设置了这个属性,在设备内存不足情况下,系统会自动清除设备缓存中的数据)。

数据处理分类

com.apple.MobileBackup 文件属性就是iOS 5.0.1引入的”do not back up”特性,用于指定文件或目录不需要备份(不管在文件系统的什么位置)。通过使用这个新的文件属性,并且将文件存放在指定的目录下,文件可以分为以下四 种数据类型:

关键数据

这些是用户创建的数据,或其它不能重新生成的数据。应该存放在/Documents目录下,并且不应该标 记为do not backup属性。关键数据在低存储空间时会保留,而且会被iCloud或iTunes备份。

缓存数据

可以重新下载或生成的数据,而且没有这些数据也不会妨碍用户离线使用应用的功能。缓存数据应该保存 在/Library/Caches目录下。缓存数据在设备低存储空间时可能会被系统自动删除,iTunes或 iCloud不会对其进行备份。

临时数据

应用需要写到本地存储,内部使用的临时数据,但不需要长期保留使用。临时数据应该保存在/tmp目录。系统可能会清空该目录下的数据,iTunes或iCloud也不会对其进行备份。应用在不需要使用这些数据时,应该尽快地删除临时数据,以避免浪费用户的存 储空间。

离线数据

可以下载,或重新创建,但用户希望在离线时也能访问这些数据。离线数据应该存放在/Documents目 录或/Library/Private Documents目录,并标记为”do not backup”属性。这两个位置的数据在低存储空间时都会保留,而”do not backup”属性会阻止iTunes或iCloud备份。应用不再需要离线数据文件时,应该尽快删除,以避免浪费用户的存储空间。

怎样阻止数据备份到iCloud或iTunes

How do I prevent files from being backed up to iCloud and iTunes?

在iOS,应用只负责将用户数据而不是应用程序的数据备份到iCloud或iTunes。
iOS5.0.1开始支持设置”do not back up”属性,允许开发者哪些哪些文件需要备份,哪些本地缓存是应该自动删除,哪些文件是应该不需备份但不可以删除。对目录设置该属性会阻止备份该目录及该目录下的所有文件。

iOS5.1和以后

在iOS5.1开始,应用可以使用NSURLIsExcludedFromBackupKey或者kCFURLIsExcludedFromBackupKey来排除文件或目录备份。如果应用程序需要排除大量的文件,可以通过创建他们的子目录然后标记这个目录为do not back up来将它们排除在外。应用应该创建他们自己的需要排除的目录,而不要排除系统定义的目录。所有运行iOS 5.1及以后的应用程序应该使用这些api排除数据备份。

iOS 5.0

在iOS5.0不支持“do not back up”属性,如果你的app一定要支持iOS5.0,你可以把app数据存放在Caches目录下来避免备份。但iOS会在必要时删除Caches目录下的数据。

iOS 5.0.1

如果你的app运行在iOS5.0.1,可以使用一下方法来设置扩展属性。当你创建不需要备份的文件或目录时,向文件写入数据,然后调用下面方法,并传递一个文件URL。

参考
iOS Data Storage Guidelines

你可能感兴趣的:(iOS开发之iOS沙盒数据存储指南)