私は affoundation ビデオ エンコーディング プログラムのプロファイリングを行っていました。フレームが書き込まれるとメモリが増加します。autoreleasepool を追加した後、問題はなくなりました。
@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 を使用しない場合:
autoreleasepool を使用する場合:
autoreleasepool についてはまだよくわかりません。私のコードで正確に何が起こったのか説明してもらえますか? また、フレームごとにプールを空にする代わりに、フレーム書き込みをバッチ処理する必要がありますか?