2

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

我花了一些时间搜索,但我找不到明确的答案。大多数人似乎认为NSFileWrapper将所有数据加载到内存中,但有些人表示它不会加载数据,直到您调用-regularFileContents包装器。(参见NSFileWrapper 将所有内容加载到内存中吗?Objective-C / Cocoa:上传图像、工作内存和存储示例。)

文档并不完全清楚,但类似的选项NSFileWrapperReadingImmediate似乎NSFileWrapperReadingWithoutMapping表明它并不总是阅读所有内容。

我收集NSFileWrapper支持增量保存,只写出已被替换的子包装器。所以如果它也支持增量加载就好了。

有确定的答案吗?

4

1 回答 1

2

NSFileWrapper默认情况下延迟加载,除非您指定NSFileWrapperReadingImmediate选项。它将避免将文件读入内存,直到实际请求它为止。

仅作为调试帮助,您可以通过检查以下内容来查看文件是否已加载:

[wrapper valueForKey:@"_contents"];

NSData一旦从磁盘读取文件,它就会被填充。

于 2013-04-09T08:37:11.877 回答