2017-02-16 14 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 МБ, и после этого места не бесплатно. Затем я получил сбой памяти –

+0

Используйте инструменты XCode, (команда + i) и выберите «Утечки». Затем запустите приложение так же, как и при сбое. Инструмент-инструмент покажет вам, на какой строке кода происходит утечка памяти. – TMob

ответ

0

Вы можете попытаться поместить эти части кода (UIImage деклараций, фильтров операций и т.д.), память нужно освободить внутри autoreleasepool блока. Это помогает вручную сократить использование памяти.

+0

Спасибо. Я стараюсь, никакого эффекта. –

+0

Когда я впервые столкнулся с такой проблемой и попытался использовать 'autoreleasepool', это тоже не повлияло. Я бы предложил попытаться изменить место и область этого блока. Например, в моем случае трюк заключался в том, чтобы поместить его внутри * в оператор цикла (я обрабатывал много изображений), а внутри блока мне пришлось поместить назначение моего изображения в оператор imageView. Так что, возможно, немного поразмышляйте об этом. –

+0

Я пытаюсь поставить 'autoreleasepool' в блок обработки и на карту rx. Я думаю, что ресурсы, используемые gpuimage, которые не считаются доступными для системы, и 'autoreleasepool', не могут их очистить. Я сказал, что это может быть некоторый кеш gpuimage –