NSFileWrapper是否支持延迟加载?

时间:2013-03-25 15:27:28

标签: macos cocoa lazy-loading nsdocument nsfilewrapper

我正在创建一个包含潜在数百个大文件的NSDocument包,因此我不想在打开文档时全部阅读。

我花了一些时间搜索,但我找不到明确的答案。大多数人似乎认为NSFileWrapper将所有数据加载到内存中,但有些人表示在您在包装器上调用-regularFileContents之前它不会加载数据。 (有关示例,请参阅Does NSFileWrapper load everything into memory?Objective-C / Cocoa: Uploading Images, Working Memory, And Storage。)

文档并不完全清楚,但NSFileWrapperReadingImmediateNSFileWrapperReadingWithoutMapping等选项似乎表明它并不总是读取所有内容。

我认为NSFileWrapper支持增量保存,只写出已被替换的子包装器。因此,如果它也支持增量加载也会很好。

有明确的答案吗?

1 个答案:

答案 0 :(得分:2)

默认情况下,

NSFileWrapper会延迟加载,除非您指定NSFileWrapperReadingImmediate选项。在实际请求文件之前,它将避免将文件读入内存。

仅作为调试辅助工具,您可以通过检查来查看文件是否已加载:

[wrapper valueForKey:@"_contents"];

从磁盘读取文件后,它将以NSData填写。