一个应用似乎很少崩溃,苹果工程师建议原因是,如果用户在创建NSDATA对象的时间和何时,则可能发生崩溃应用程序尝试读取该nsdata对象的第一个字节。
这意味着Parse正在下载/存储使用"完整"数据保护级别(NSFileProtectionComplete)的文件。
let query = PFQuery(className: aClass)
let result = try query.getFirstObject()
guard
let imageObject = result.objectForKey(aKey) as? PFFile,
let imageData = try? imageObject.getData(),
let firstByte = imageData.dataType() // this reads the 1st byte of data
else {
return
}
parse iOS SDK似乎使用NSFileProtectionCompleteUntilFirstUserAuthentication
,允许在启动设备后第一个用户身份验证/解锁后允许文件访问。
static NSDictionary *_PFFileManagerDefaultDirectoryFileAttributes() {
#if !PF_TARGET_OS_OSX
return @{ NSFileProtectionKey : NSFileProtectionCompleteUntilFirstUserAuthentication };
#else
return nil;
#endif
}
static NSDataWritingOptions _PFFileManagerDefaultDataWritingOptions() {
NSDataWritingOptions options = NSDataWritingAtomic;
#if !PF_TARGET_OS_OSX
options |= NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication;
#endif
return options;
}
@interface PFFileManager ()
@property (nonatomic, copy) NSString *applicationIdentifier;
@property (nonatomic, copy) NSString *applicationGroupIdentifier;
@end
@implementation PFFileManager
所以我假设同步PFFile.getData()
使用NSFileProtectionCompleteUntilFirstUserAuthentication
是正确的吗?还是由于数据加载到内存而根本不写入文件而根本不使用文件保护?
进一步挖掘解析iOS SDK后,我可以回答以下问题:
同步(类似于异步)文件获取使用NSFileManager
和NSFileProtectionCompleteUntilFirstUserAuthentication
。