NSFileWrapper是否将所有内容加载到内存中?

可以说我有一个NSFileWrapper目录。 该目录由多个级别的目录和文件组成。 有些文件很大。 所有这些文件都加载到内存中,还是懒得加载?

如果将它们加载到内存中, NSFileWrapper是否有其他类似function的替代品,它们不会将文件加载到内存中? 我能挂进UIDocument东西?


这适用于基于文档的应用程序,它使用与iCloud同步的UIDocument 。 文档可以在其中嵌入图像和video。 每个图像/video都有一个HTML文档中显示的预览图像(缩略图)。 全尺寸图像或video不应加载到内存中,而应按需加载。

我还需要一种方法来添加资源而不将其加载到内存中。 像“initWithAsset:(ALAsset *)”这样的东西是理想的。

从文档来看并不完全清楚,但我99%肯定NSFileWrapper将内存映射一切NSFileWrapper的主要用例是将文件嵌入到文档中,您可能始终需要访问所述文件。

您正在尝试使用文件包装器? 我假设如果您要映射整个目录,则不一定要将媒体嵌入到文档中,但也许我错了。 如果您可以更多地谈论您的用例,那么这将影响您可能采用的替代方案。

我不久前制作了一个应用程序来制作video。 然后使用UIDocument子类将此video保存为特定的文件格式。

在执行contentsForType:error: ,使应用程序不会耗尽内存的唯一方法是contentsForType:error:将video输出到tmp目录中的文件,并使用NSFileWrapperReadingWithoutMapping -option将video的url初始化为filewrapper,以防止它加载video到内存,只需复制到文件中。

 - (id)contentsForType:(NSString *)typeName error:(NSError **)outError { if (self.fileWrapper == nil) { self.fileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:nil]; } if (self.videoURL != nil) { NSError *fileReadError; NSFileWrapper *videoFileWrapper = [[NSFileWrapper alloc] initWithURL:self.videoURL options:NSFileWrapperReadingWithoutMapping error:&fileReadError]; if(fileReadError){ NSLog(@"File read error: %@", [fileReadError localizedDescription]); }else { [videoFileWrapper setPreferredFilename:@"video.mov"]; [self.fileWrapper addFileWrapper:videoFileWrapper]; } } //... }