iOS沙盒文件不作備份處理(路徑及其說明)

iOS5多了一個比較重要的功能iCloud,但是同時也出現(xiàn)一個問題,很多的APP都把很大量的數(shù)據(jù)存在APP底下的Documents(/Documents )文件夾里面,這樣蘋果會reject掉你的APP的,除非你不再更新就一直把APP擺在APPStore,顯然這樣是不可行的,因為你這些文件會同步到iCloud上面的。

這里有辦法不讓蘋果reject你的APP,一個就是把這些文件存在Caches(/Library/Caches)文件夾里面,但是這個蘋果說了,如果在低存儲空間的時候會清理的,所以你有可能就這樣被清了這些數(shù)據(jù),會導致一些列的問題,如果你不在意這些文件是否會被刪除,或者這些數(shù)據(jù)只要保存那么幾天,那么這樣就行了

如果你要文件不刪除但是也備份,可以使用下面代碼來做標記,不做備份處理:

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);
 
    NSError *error = nil;
    BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
                                  forKey: NSURLIsExcludedFromBackupKey error: &error];
    if(!success){
        NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
    }
    return success;
}

或者

#import <sys/xattr.h>
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSString*) path
{    
   if (SYSTEM_VERSION_LESS_THAN(@"5.1"))
    {
      constchar* folderPath = [pathfileSystemRepresentation];
      const char* attrName ="com.apple.MobileBackup";
      u_int8_t attrValue = 1;
      intresult = setxattr(folderPath, attrName,&attrValue,sizeof(attrValue),0,0);
      return result == 0;
   } 
   else
    {
#ifndef __IPHONE_5_1
#define NSURLIsExcludedFromBackupKey @"NSURLIsExcludedFromBackupKey"
#endif
      NSError *error = nil;
      NSURL* url = [NSURLfileURLWithPath:path];
      BOOLsuccess = [url setResourceValue:[NSNumbernumberWithBool:YES]
                               forKey:NSURLIsExcludedFromBackupKey 
                                error: &error];
      return success;
    }
}

由于手機資源空間有限而且考慮到Apple推出的iCloud,我們確實要對創(chuàng)建出的文件按照作用的不同,分出幾種類別出來,并設置文件備份屬性attribute(需iOS5.0.1及以上),從而讓iOS系統(tǒng)更好地管理和對待我們所創(chuàng)建的文件。

iOS的文件分類、存放路徑及文件屬性
關鍵數(shù)據(jù)

內容:用戶創(chuàng)建的數(shù)據(jù)文件,無法在刪除后自動重新創(chuàng)建,且會
路徑:主目錄/Documents
屬性:不要設置"不備份"
管理:iOS系統(tǒng)即時遇到存儲空間不足的情況下,也不會清除,同時會備份到iTunes或iCloud中

緩存數(shù)據(jù)

內容:可用于離線環(huán)境,可被重復下載重復生成,即時在離線時缺失,應用本身也可以正常運行
路徑:主目錄/Library/Caches
屬性:默認
管理:在存儲空間不足的情況下,會清空, 并且不會被自動備份到iTunes和iCloud中

臨時數(shù)據(jù)

內容:應用運行時,為完成某個內部操作臨時生成的文件
路徑:主目錄/tmp
屬性:默認
管理:隨時可能被iOS系統(tǒng)清除,且不會自動備份到iTunes和iCloud,盡量在文件不再使用時,應用自己情況,避免對用戶設備空間的浪費

離線數(shù)據(jù)

內容:與緩存數(shù)據(jù)類似,可以被重新下載和重建,但是用戶往往希望在離線時數(shù)據(jù)依然能夠托托地存在著
目錄:主目錄/Documents 或 主目錄/Library/自定義的文件夾
屬性:放于Documents下不需設置,放在自定義文件夾中需設置"不備份"
管理:與關鍵數(shù)據(jù)類似,即時在存儲空間不足的情況下也不會清楚,應用自己應該清除已經(jīng)不再使用的文件,以免浪費用戶設備空間

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容