读取本地文件时应使用哪些NSDataReadingOptions?

时间:2016-04-23 10:14:44

标签: ios swift nsdata

使用NSData(contentsOfURL:options:)读取本地文件时,哪一个是合适的阅读选项?

还有NSData(contentsOfURL:)没有NSDataReadingOptions。默认使用哪种阅读选项?

以供参考Apple docs

1 个答案:

答案 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

Apple Documentation : dataWithContentsOfFile

Apple Documentation : dataWithContentsOfFile:options:error