2012-05-22 75 views
1

我正在使用一個應用程序,即使用AVCaptureSession,顯示來自設備相機的「實時」視頻流。我還使用AVCaptureVideoDataOutputSampleBufferDelegate方法從sampleBuffer中捕獲靜止圖像(UIImage),以便在視頻仍在屏幕上顯示時使用這些圖像(使用OpenCV)。無論如何,這裏有很多代碼,比我在這裏粘貼的代碼要多得多,但這其實並不重要。iOS - 應用程序崩潰後內存警告 - 儀器顯示沒有泄漏

這個應用程序會在幾秒鐘後和幾秒鐘後顯示一條內存警告,並以靜默方式崩潰。我試圖使用Instruments來檢查泄漏和內存分配,但沒有任何可疑的顯示,沒有泄漏,內存使用永遠不會超過5MB(總體和活動字節)。

如何找出觸發記憶體警告的原因?

編輯:我試過一些有意地泄漏添加到代碼,這將在儀器顯示出來,因此它似乎在理論上工作...

+0

首先,如果您禁用緩衝(捕獲)視頻,您應該檢查是否會發生此次崩潰。如果沒有,你會知道你必須修改緩衝例程 - 如果/當內存警告到達時可能會停止它。 –

回答

1

我只是找到了原因,但我不明白爲什麼儀表不顯示此...

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection

方法使用[t performSelectorInBackground:sel withObject:[self imageFromSampleBuffer:sampleBuffer]];

。我評論說,這個應用程序運行良好。所以這裏的問題是,儘管我在選擇器中使用了NSLock,但應用程序會爲每個選擇器產生越來越多的線程,直到達到內存限制。所以這裏的解決方案是在執行選擇器之前使用鎖定,而不是在選擇器方法內部。

感謝您的幫助。

+0

你已經提到過在執行選擇器之前使用鎖定。你可以請分享一個代碼片段或細節。 – Prerna

2

我相信你所遇到的問題是關係到使用UIImage和蘋果公司的幕後緩衝。在使用iOS的PDF功能時,我遇到了類似的問題。由於您沒有發佈任何代碼,所以我可以特別提出的是發佈發佈命令(即CGImageRelease(),CGContextRelease()等),並始終牢記參考和實際數據之間的差異。

+0

嘿,謝謝你的回答,這是我的第一個想法,但我仔細檢查了整個代碼中的任何未發佈的圖像數據 - 什麼都沒有。 – jimpic

相關問題