不久前我制作了一个生成视频的应用程序。然后使用 UIDocument 子类将此视频保存为特定的文件格式。
使应用程序在执行时不会耗尽内存的唯一方法contentsForType:error:
是将视频输出到 tmp 目录中的文件,并使用NSFileWrapperReadingWithoutMapping
-option 使用视频的 url 初始化文件包装器,以防止它将视频加载到内存中,而只是复制到文件中。
- (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];
}
}
//...
}