使用NSData(contentsOfURL:options:)
读取本地文件时,哪一个是合适的阅读选项?
还有NSData(contentsOfURL:)
没有NSDataReadingOptions
。默认使用哪种阅读选项?
以供参考Apple docs。
答案 0 :(得分:9)
如果您使用以下方法:
NSData dataWithContentsOfFile:(NSString *)path
options:(NSDataReadingOptions)readOptionsMask
error:(NSError * _Nullable *)errorPtr;
适当的选项取决于您打算如何处理数据;如Apple文档中所述:
NSDataReadingUncached
:指示文件不应存储在文件系统缓存中的提示。 (对于一次读取并丢弃的数据,此选项可以提高性能。)NSDataReadingMappedIfSafe
:如果可能且安全的话,提示表明文件应该映射到虚拟内存中。NSDataReadingMappedAlways
:如果可能,提示将文件映射到。 (如果两者都给出,则优先于NSDataReadingMappedIfSafe
。)有关mappedFiles的一些解释:只有在数据对象存在的时间内保证文件存在时才应使用。使用dataWithContentsOfFile:
方法通常更安全。
使用mappedFiles选项时,该方法假定映射文件可从底层操作系统获得。映射文件使用虚拟内存技术来避免将文件页面复制到内存中,直到实际需要它们为止。
另一种方法:
NSData dataWithContentsOfFile:(NSString *)path;
相当于dataWithContentsOfFile:options:error
,没有给出选项。
<强>结论强>
如果我们把它放在一起,你应该使用:
dataWithContentsOfFile:
如果您对数据或内存使用问题没有特殊需求。这是更安全的选择。dataWithContentsOfFile:options:error
NSDataReadingUncached
选项,如果您只使用一次数据dataWithContentsOfFile:options:error
使用NSDataReadingMappedIfSafe
选项,并确保该文件在NSData对象的整个生命周期内都存在。dataWithContentsOfFile:options:error
NSDataReadingMappedAlways
选项 - 与上述相同,但安全措施较少。来源:
Apple Documentation : NSReadingOptions