2017-02-16 9 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枚の写真を処理した後、私のメモリ使用量は200MBに増え、このスペースは空き容量がなくなりました。次にメモリが壊れた –

+0

XCode Instruments(コマンド+ i)を使って "Leaks"を選択します。その後、クラッシュが発生したときと同じようにアプリを実行します。 instruments-toolは、メモリリークが発生しているコード行を表示します。 – TMob

答えて

0

あなたはautoreleasepoolブロック内で解放する必要がメモリにコードの部分(UIImage宣言、フィルタの操作など)を配置しようとすることができます。メモリ使用量を手動で減らすのに役立ちます。

+0

ありがとう。私はそれを試して、効果はありません。 –

+0

私が最初にこのような問題に直面し、 'autoreleasepool'を使用しようとしたとき、それは何の効果もありませんでした。私はこのブロックの場所と面積を変更しようと提案します。例えば、私の場合、トリックは、ループステートメント(たくさんの画像を扱っていた)の中に置くことでした。そして、ブロックの中で、私の画像をimageViewステートメントに置かなければなりませんでした。だから多分それを周りに遊ぶ –

+0

私は 'autoreleasepool'を処理ブロックとrxマップに入れようとします。私はgpuimageで使われているリソースがシステムで利用できないと考えていて、 'autoreleasepool'でそれらをクリアできないと思います。私はそれがgpuimageのキャッシュかもしれないと言った –

関連する問題