iCloud是一種面向消費者市場的雲存儲服務,蘋果公司已經做了大量的工作讓用戶能夠平滑過渡到iCloud,不過對開發者而言這意味著新的負擔。 怎樣使用iCloud? 你可以使用2種方式在你的應用中使用iCloud.如果你需要讓你的應用在不同設備上共用一些配置信息,你可以使用iCloud的鍵值對存儲, ...
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編程指南》