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)不再使用的文件,以免浪費用戶設備空間