我使用AVCaptureSession
来'录制'音频和视频,并使用AVAssetWriter
来实际上记录它。当我的viewController加载时,视图显示来自摄像机的'直播',但还没有录制(存储到磁盘)。但是,记忆使用逐渐增加,并且不会停止。我用Instruments
并试图找到泄漏,但我不知道如何解释这一点。行VM:Allocation 16,00 KB
不断增加,我不确定它是什么。我的AVFoundation/AVCaptureSession泄漏内存在哪里?
我委托法的实施几乎什么也不做,在这一点上:
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:
(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
CMFormatDescriptionRef formatDescription = CMSampleBufferGetFormatDescription(sampleBuffer);
CFRetain(sampleBuffer);
CFRetain(formatDescription);
dispatch_async(movieWritingQueue, ^{
//If recording
if(assetWriter){
//do stuff
}
});
CFRelease(sampleBuffer);
CFRelease(formatDescription);
}
的问题是;当加载视图(在开始记录之前)时,assetWriter始终为零,因为它应该是。所以每次调用上面的委托方法时,都不应该做任何事情。 我从来没有做过太多的发布,因为ARC一直为我解决这个问题。我是否在做错CF
的事情?
我的方法每次都以某种方式存储这些变量之一吗?
这些CFRetains的理由是什么?这是一件很奇怪的事情。 – matt 2014-09-05 19:08:49
@matt虽然在它们之间有'dispatch_async()',但它们并没有真正的效果。 – trojanfoe 2014-09-05 19:09:36
@trojanfoe我完全和你在一起,但它仍然是完全没有必要的,并且很高兴知道CFRetain/CFRelease对发生的所有事情都会被删除。 – matt 2014-09-05 19:10:13