iOS存儲數據到相應目錄的問題

iOS存儲數據到相應目錄的問題

https://www.cnblogs.com/yilia/p/3433641.html

原文地址:http://www.cocoachina.com/bbs/simple/?t86244.html

iOS Data Storage Guidelines 和 "do not back up"文件屬性

iOS 5有了iCloud後,Apple更新了數據存儲指導方針,以適應於iCloud存儲,同時增加了“不要備份”文件屬性,可以指定文件不備份和上傳到iCloud

摘錄如下,供大家參考:


iOS 數據存儲指導方針

iCloud包括了備份,會通過Wi-Fi每天自動備份用戶iOS設備。app的home目錄下的所有東西都會被備份,除了應用Bundle本身、緩存目錄和temp目錄。已購買的音樂、應用、書籍、Camera Roll、設備設置、主屏幕、App組織、消息、鈴聲也都會被備份。由於備份通過無線進行,並且爲每個用戶存儲在iCloud中,應用需最小化自己存儲的數據數量。大文件會延長備份時間,並且消耗用戶的可用iCloud空間。

爲了確保備份儘可能快速高效,應用存儲數據需要遵循以下指導方針:

1. 只有那些用戶生成的文檔或其它數據,或者應用不能重新創建的數據,才應該存儲在/Documents目錄下,並且會被自動備份到iCloud。

2. 可以重新下載或生成的數據,應該存儲在/Library/Caches目錄。例如數據庫緩存文件、可下載文件(雜誌、報紙、地圖應用使用的數據)等都屬於這一類。

3. 臨時使用的數據應該存放在/tmp目錄。儘管這些文件不會被iCloud備份,應用在使用完之後需要記得刪除這些文件,這樣纔不會繼續佔用用戶設備的空間。

4. 使用"不要備份"屬性來指定那些需要保留在設備中的文件(即使是低存儲空間情況下)。那些能夠重新生成,但在低存儲空間時仍需保留,對應用正常運行有影響,或者用戶希望文件在離線時可用的文件,需要使用這個屬性。無論哪個目錄下的文件(包括Documents目錄),都可以使用這個屬性。這些文件不會被刪除,也不會包含在用戶的iCloud或iTunes備份中。由於這些文件一直佔用着用戶設備的存儲空間,應用有責任定期監控和刪除這些文件。






iOS 5.0.1開始支持"do not back up"文件屬性,允許開發者明確地指定哪些文件應該被備份,哪些是本地緩存可以自動刪除,哪些文件不需要備份但不能刪除。此外,對目錄設置這個屬性,會阻止備份該目錄和目錄中的所有內容。

注意"do not back up"屬性只能用於iOS 5.0.1以後版本。之前版本的應用需要存儲數據到/Library/Caches目錄才能避免被備份。由於老的系統忽略這個屬性,你需要確保應用在所有iOS版本中,都遵循上面的iOS Data Storage Guidelines。

數據處理分類
com.apple.MobileBackup文件屬性就是iOS 5.0.1引入的"do not back up"特性,用於指定文件或目錄不需要備份(不管在文件系統的什麼位置)。通過使用這個新的文件屬性,並且將文件存放在指定的目錄下,文件可以分爲以下四種數據類型:s.

關鍵數據
這些是用戶創建的數據,或其它不能重新生成的數據。應該存放在/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備份。應用不再需要離線數據文件時,應該儘快刪除,以避免浪費用戶的存儲空間。ce.


設置Do Not Backup擴展屬性
注意:"do not backup"擴展屬性可以添加到任何文件或目錄,在舊版本的系統中也能夠設置。但舊系統仍然會備份這些文件,一旦設備更新到iOS 5.0.1,這些文件會被重新正確地配置。

使用下面方法來設置"do not back up"擴展屬性。當你創建不需要備份的文件或目錄時,向文件寫入數據,然後調用下面方法,並傳遞一個文件URL。

設置擴展屬性
#include
- (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;
}

 


//設置擴展屬性
#include 
- (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;
}

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章