ios - 读取本地文件时应该使用哪个 NSDataReadingOptions?

标签 ios swift nsdata

当使用 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:errorNSDataReadingMappedAlways 选项 - 与上述相同,但安全措施较少。

来源:

Apple Documentation : NSReadingOptions

Apple Documentation : dataWithContentsOfFile

Apple Documentation : dataWithContentsOfFile:options:error

关于ios - 读取本地文件时应该使用哪个 NSDataReadingOptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36809449/

相关文章:

iphone - 在 obj-c 中将 NSData 加密为 NSString?

objective-c - 具有多个 CDVViewController 的 Phonegap/Cordova

iOS - 如何重新初始化表格 View 单元格

ios - Swift 弱引用混淆

ios - 错误消息 NSData

ios - 从完成处理程序的 NSURLSession DownloadTaskWithRequest 获取数据

ios - 调用/消息代码崩溃?

ios - 如何在 Xcode 中设置启动屏幕图像

swift - 由于自定义表格 View 样式代码 (Xcode8) 而创建的 UIView 导致按钮受阻

ios - 创建 UIViewController 的通用子类来管理 iOS 应用程序中的所有 UI 是一个好习惯吗?