Jacinth 2018-04-04
iCloud是一种面向消费者市场的云存储服务,苹果公司已经做了大量的工作让用户能够平滑过渡到iCloud,不过对开发者而言这意味着新的负担。
怎样使用iCloud?
你可以使用2种方式在你的应用中使用iCloud.如果你需要让你的应用在不同设备上共享一些配置信息,你可以使用iCloud的键值对存储,但是在空间使用上有64KB的大小限制。对于更大的数据,你需要使用iCloud的文件存储服务。
iCloud框架的目的是文件管理服务。至少到目前为止,苹果没提供标准的UI控件。
iCloud备份。
应用内的Document文件夹中的文件每天都会自动备份到iCloud上,正因为iOS5中引入了这种iCloud备份机制,苹果开始呼吁开发者不要把大量文件放到Document目录中,只有用户所产生,无法由应用再次生成的文件及数据才应该存入该目录。
其他的可以重新生成下载的数据则应该存储在应用的Library/Caches目录中,而临时文件则存到tmp目录中。
但是,Library/Cache和tmp目录都不能备份到云端,而且当空间不足时,设备就会清理掉里面的数据。所以如果你的应用中有些不需要备份的离线文件,并且又不希望存储空间短缺的时候 设备自动清理这些文件的话,你可以给这些文件设置一个"do not back up"的属性来告诉设备我们需要保留这些文件。
#include <sys/xattr.h> - (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL { const char* filePath = [[URL path] fileSystemRepresentation]; const char* attrName = "com.apple.MobileBackup"; u_int8_t attrValue = 1; int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); return result == 0; }
无论文件存在何目录,该属性都能起作用,包括Document目录。设备不会清除标识了该属性的文件,也不会将这些文件备份到用户的iCloud或iTunes中。所以,你的应用必须负责管理和定期清除这些文件。
"do not back up"属性是从iOS5.0.1引入的,此版本之前的系统都不支持该属性。
参考资料《iOS编程指南》