一般数据可以分一下4种:
1,关键数据
这些是用户创建的数据,或其它不能重新生成的数据。应该存放在<Application_Home>/Documents目录下,并且不应该标记为"do not backup"属性。关键数据在低存储空间时也会保留,而且会被iCloud或iTunes备份。
2,缓存数据
可以重新下载或生成的数据,而且没有这些数据也不会妨碍用户离线使用应用的功能。缓存数据应该保存在<Application_Home>/Library/Caches目录下。缓存数据在设备低存储空间时可能会被删除,iTunes或iCloud不会对其进行备份。
3,临时数据
应用需要写到本地存储,内部使用的临时数据,但不需要长期保留使用。临时数据应该保存在<Application_Home>/tmp目录。系统可能会清空该目录下的数据,iTunes或iCloud也不会对其进行备份。应用在不需要使用这些数据时,应该尽快地删除临时数据,以避免浪费用户的存储空间。
4,离线数据
可以下载,或重新创建,但用户希望在离线时也能访问这些数据。离线数据应该存放在<Application_Home>/Documents目录或<Application_Home>/Library/Private Documents目录,并标记为"do not backup"属性。这两个位置的数据在低存储空间时都会保留,而"do not backup"属性会阻止iTunes或iCloud备份。应用不再需要离线数据文件时,应该尽快删除,以避免浪费用户的存储空间。
23都比较好理解,但1和4经常容易混淆。
其实关键数据和离线数据都是比较重要的数据,都是不希望被系统无故清除的数据。
但关键数据一般是用户使用APP时产生的数据,如用户的配置信息等。无法重新生成。而且关键数据一般都比较小。
离线数据则是用户可以重新创建或者可以从网上重新下载的数据,离线数据一般都比较大。
同时苹果在数据存储审核这一块,也不允许开发者将太多太大的文件放到iCloud。
那么,离线数据如何标记“DO NOT BACKUP”呢?
iOS5.1后可以使用如下方法:
- (BOOL)addSkipBackupAttributeToItemAtPath:(NSString *) filePathString
{
NSURL* URL= [NSURL fileURLWithPath: filePathString];
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;
}
iOS5.1之前的版本需要使用其他的方法,但现在应该没什么APP需要支持5.1之前把。
Swift方法或需要支持5.1之前可以参考如下链接:
https://developer.apple.com/library/ios/qa/qa1719/_index.html#//apple_ref/doc/uid/DTS40011342