我正在分析一个 avfoundation 视频编码程序。内存随着帧的写入而增加。添加自动释放池后,问题就消失了。
@autoreleasepool {
NSString *inputFramePath = self.inputFramePaths[self.currentFrameIndex++];
self.currentFrame = [UIImage imageWithContentsOfFile:inputFramePath];
CVPixelBufferRef buffer = (CVPixelBufferRef)[VideoExporter newPixelBufferFromCGImage:self.currentFrame.CGImage size:self.resolution];
if (buffer) {
[self.adaptor appendPixelBuffer:buffer withPresentationTime:self.nextPTS];
CVPixelBufferRelease(buffer);
self.nextPTS = CMTimeAdd(self.frameDuration, self.nextPTS);
}
}
没有自动释放池:
使用自动释放池:
我仍然不太清楚 autoreleasepool,有人可以解释一下我的代码中到底发生了什么吗?我是否需要批量写入帧而不是为每一帧耗尽池?