假设我有一个NSFileWrapper目录。该目录由几个级别的目录和文件组成。有些文件很大。所有这些文件是加载到内存中,还是懒洋洋地加载?
如果它们被加载到内存中,那么是否有类似功能的NSFileWrapper的替代方案不会将文件加载到内存中?一些我可以连接到UIDocument的东西
这是一个基于文档的应用程序,它使用UIDocument与iCloud同步。文档中可以嵌入图像和视频。每个图像/视频都有一个预览图像(缩略图),显示在一个HTML文档中。不应该将完整大小的图像或视频加载到内存中,而是按需加载。
我还需要一种不将资源加载到内存中就添加资源的方法。类似于"initWithAsset:(ALAsset *)“将是理想的。
发布于 2012-11-29 10:19:16
从文档中还不完全清楚,但我99%的肯定是NSFileWrapper将记忆映射所有的东西。NSFileWrapper的主要用例是在文档中嵌入文件,在文档中您可能需要随时访问该文件。
你想用这个文件包装做什么?我想,如果要映射整个目录,不一定要将媒体嵌入到文档中,但我可能弄错了。如果您可能会更多地谈论您的用例,因为这将影响您可能选择的替代方案。
发布于 2014-02-27 11:01:54
不久前,我做了一个应用程序,可以生成一个视频。然后使用UIDocument子类将此视频保存为特定的文件格式。
使应用程序在执行contentsForType:error:时不耗尽内存的唯一方法是将视频输出到tmp dir中的一个文件中,并将文件和url一起插入到带有NSFileWrapperReadingWithoutMapping-option的视频中,以防止它将视频加载到内存中,只需复制文件。
- (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];
}
}
//...
}https://stackoverflow.com/questions/13621502
复制相似问题