我正在创建一个可能包含成百上千个大文件的NSDocument包,所以我不想在打开文档时将其全部读取。
我花了一些时间寻找,但我找不到一个明确的答案。大多数人似乎认为NSFileWrapper会将所有数据加载到内存中,但也有人指出,直到您在包装器上调用-regularFileContents时,它才会加载数据。(有关示例,请参阅Does NSFileWrapper load everything into memory?和Objective-C / Cocoa: Uploading Images, Working Memory, And Storage。)
文档并不完全清楚,但像NSFileWrapperReadingImmediate和NSFileWrapperReadingWithoutMapping这样的选项似乎表明,它并不总是读取所有内容。
我知道NSFileWrapper支持增量保存,只写出已经被替换的子包装器。因此,如果它也支持增量加载就更好了。
有一个明确的答案吗?
发布于 2013-04-09 16:37:12
除非您指定了NSFileWrapperReadingImmediate选项,否则默认情况下NSFileWrapper会延迟加载。它将避免将文件读取到内存中,直到有实际请求。
作为一个仅用于调试的,您可以通过检查以下内容来查看文件是否已经加载:
[wrapper valueForKey:@"_contents"];一旦从磁盘读取文件,它就会被填充为NSData。
https://stackoverflow.com/questions/15618628
复制相似问题