我正在创建一个包含潜在数百个大文件的NSDocument
包,因此我不想在打开文档时全部阅读。
我花了一些时间搜索,但我找不到明确的答案。大多数人似乎认为NSFileWrapper
将所有数据加载到内存中,但有些人表示在您在包装器上调用-regularFileContents
之前它不会加载数据。 (有关示例,请参阅Does NSFileWrapper load everything into memory?和Objective-C / Cocoa: Uploading Images, Working Memory, And Storage。)
文档并不完全清楚,但NSFileWrapperReadingImmediate
和NSFileWrapperReadingWithoutMapping
等选项似乎表明它并不总是读取所有内容。
我认为NSFileWrapper
支持增量保存,只写出已被替换的子包装器。因此,如果它也支持增量加载也会很好。
有明确的答案吗?
答案 0 :(得分:2)
NSFileWrapper
会延迟加载,除非您指定NSFileWrapperReadingImmediate
选项。在实际请求文件之前,它将避免将文件读入内存。
仅作为调试辅助工具,您可以通过检查来查看文件是否已加载:
[wrapper valueForKey:@"_contents"];
从磁盘读取文件后,它将以NSData
填写。