我使用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