首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSFileWrapper是否将所有内容加载到内存中?

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

Stack Overflow用户
提问于 2012-11-29 08:20:48
回答 2查看 2.2K关注 0票数 7

假设我有一个NSFileWrapper目录。该目录由几个级别的目录和文件组成。有些文件很大。所有这些文件是加载到内存中,还是懒洋洋地加载?

如果它们被加载到内存中,那么是否有类似功能的NSFileWrapper的替代方案不会将文件加载到内存中?一些我可以连接到UIDocument的东西

这是一个基于文档的应用程序,它使用UIDocument与iCloud同步。文档中可以嵌入图像和视频。每个图像/视频都有一个预览图像(缩略图),显示在一个HTML文档中。不应该将完整大小的图像或视频加载到内存中,而是按需加载。

我还需要一种不将资源加载到内存中就添加资源的方法。类似于"initWithAsset:(ALAsset *)“将是理想的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-29 10:19:16

从文档中还不完全清楚,但我99%的肯定是NSFileWrapper将记忆映射所有的东西。NSFileWrapper的主要用例是在文档中嵌入文件,在文档中您可能需要随时访问该文件。

你想用这个文件包装做什么?我想,如果要映射整个目录,不一定要将媒体嵌入到文档中,但我可能弄错了。如果您可能会更多地谈论您的用例,因为这将影响您可能选择的替代方案。

票数 6
EN

Stack Overflow用户

发布于 2014-02-27 11:01:54

不久前,我做了一个应用程序,可以生成一个视频。然后使用UIDocument子类将此视频保存为特定的文件格式。

使应用程序在执行contentsForType:error:时不耗尽内存的唯一方法是将视频输出到tmp dir中的一个文件中,并将文件和url一起插入到带有NSFileWrapperReadingWithoutMapping-option的视频中,以防止它将视频加载到内存中,只需复制文件。

代码语言:javascript
复制
- (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];
            }        

        }
//...
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13621502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档