Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos NSFileWrapper是否支持延迟加载?_Macos_Cocoa_Lazy Loading_Nsdocument_Nsfilewrapper - Fatal编程技术网

Macos NSFileWrapper是否支持延迟加载?

Macos NSFileWrapper是否支持延迟加载?,macos,cocoa,lazy-loading,nsdocument,nsfilewrapper,Macos,Cocoa,Lazy Loading,Nsdocument,Nsfilewrapper,我正在创建一个NSDocument包,其中可能包含数百个大文件,因此我不想在打开文档时全部读取 我花了一些时间搜索,但找不到确切的答案。大多数人似乎认为NSFileWrapper会将所有数据加载到内存中,但有些人表示,只有在包装器上调用-regularlfilecontents时才会加载数据。(有关示例,请参见和。) 文档并不完全清楚,但是像NSFileWrapperReadingImmediate和NSFileWrapperReadingWithoutMapping这样的选项似乎表明,它并不总

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

我花了一些时间搜索,但找不到确切的答案。大多数人似乎认为
NSFileWrapper
会将所有数据加载到内存中,但有些人表示,只有在包装器上调用
-regularlfilecontents
时才会加载数据。(有关示例,请参见和。)

文档并不完全清楚,但是像
NSFileWrapperReadingImmediate
NSFileWrapperReadingWithoutMapping
这样的选项似乎表明,它并不总是在中读取所有内容

我推测,
NSFileWrapper
支持增量保存,只写出已替换的子包装。因此,如果它也支持增量加载,那就太好了


是否有明确的答案?

NSFileWrapper
默认情况下延迟加载,除非指定
NSFileWrapperReadingImmediate
选项。它将避免将文件读入内存,直到有东西真正请求它

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

[wrapper valueForKey:@"_contents"];

从磁盘读取文件后,会将其填写为
NSData

谢谢,非常有用。如果我指定
NSFileWrapperReadingWithoutMapping
,那么
-regularlfilecontents
将在不缓存文件的情况下读取文件,这种想法是否正确?我希望能够阅读一堆单词,而不让它们留在记忆中。更好的办法是让它缓存它们,并在不再需要时有办法卸载/丢弃它们,但我看不到任何方法。不,
NSFileWrapperReadingWithoutMapping
控制是否应该使用内存映射。无论哪种方式,覆盖该文件的
NSData
对象都将被保留。要“卸载”文件包装而不解除分配它,唯一的方法是要求它再次从URL读取。可以说,这是一种深思熟虑的设计,因此在正常情况下,
NSFileWrapper
的行为是半不变的;一旦加载,它的属性不会返回到以前的/未知状态好的,谢谢。我将尽量减少文件内容的加载(无论如何,这无疑是一个提高性能的好主意)。