当使用 NSData(contentsOfURL:options:)
读取本地文件时,哪个是合适的读取选项?
还有一个 NSData(contentsOfURL:)
没有 NSDataReadingOptions
。它默认使用哪个阅读选项?
引用Apple docs .
最佳答案
如果您使用该方法:
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
关于ios - 读取本地文件时应该使用哪个 NSDataReadingOptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36809449/