2017-02-16 29 views
0

執行代碼後,我的內存使用量增加了。如何在執行後釋放內存?使用過濾器時GPUImage內存泄漏

僅當我將圖像保存在文件系統中時纔會重現該問題。任何人都可以幫助解決這個問題?

我的代碼:

let contrastfilter = GPUImageContrastFilter() 
    contrastfilter.contrast = 1.4 

let thresholdImageFilter = GPUImageAdaptiveThresholdFilter() 
thresholdImageFilter.blurRadiusInPixels = 16.0 

let filterGroup = GPUImageFilterGroup() 
filterGroup.addFilter(contrastfilter) 
filterGroup.addFilter(thresholdImageFilter) 
contrastfilter.addTarget(thresholdImageFilter) 

filterGroup.initialFilters = [ contrastfilter ] 
filterGroup.terminalFilter = thresholdImageFilter 

let resultImage = filterGroup.image(byFilteringImage: image) 
+0

只要對象不再被引用,內存就應該釋放自己。您是否嘗試使用儀器工具來檢查內存泄漏? – TMob

+0

可能是一些緩存。處理5張照片後,我的內存使用量增加到200 MB,並且在此空間不空閒之後。然後我得到了內存崩潰 –

+0

使用XCode Instruments,(command + i)並選擇「Leaks」。然後像發生崩潰時那樣運行應用程序。儀器工具會告訴你在哪一行代碼中發生內存泄漏。 – TMob

回答

0

你可以嘗試把你的代碼(UIImage聲明,過濾操作等)的部分,你需要內部autoreleasepool塊釋放出內存。它有助於手動減少內存使用量。

+0

謝謝。我嘗試一下,沒有效果。 –

+0

當我第一次遇到這樣的問題,並嘗試使用'autoreleasepool'時,它也沒有效果。我會建議嘗試改變這個區塊的位置和麪積。例如,在我的情況下,訣竅是將它放在循環語句中(我正在處理大量圖像),並且在塊內部,我必須將圖像賦值給imageView語句。所以也許玩一下吧 –

+0

我試着把'autoreleasepool'放在處理模塊和rx圖中。我認爲gpuimage所使用的資源不適用於系統,'autoreleasepool'不能清除它們。我告訴過它可能是一些gpuimage緩存 –