Как очистить память после UIImageView.animationImages? - PullRequest
0 голосов
/ 03 июня 2018

Я создал новый проект Xcode, который имеет только следующее:

  • код, создающий массив UIImages из png-файлов, перетаскиваемых в проект (я пробовал оба UIImage (named :) иUIImage (contentsOfFile :) при добавлении изображений в массив)
  • a UIImageView
  • кнопка, которая устанавливает imageView.animationImages = arrayOfImages и вызывает imageView.startAnimating ()

При нажатии кнопки и воспроизведении анимации использование памяти увеличивается на 150-200 МБ, в зависимости от количества изображений в массиве изображений.Тогда использование памяти остается на этом уровне.

Установка imageView.animationImages = nil не очищает память.Как я могу очистить эту память?

Любые предложения будут полезны.Спасибо!

1 Ответ

0 голосов
/ 03 июня 2018

1.Не подразумевайте кэширование изображений

Я полагаю, вы используете UIImage (named :)?

Этот метод кэширует изображения, см .: https://developer.apple.com/documentation/uikit/uiimage/1624146-init

Apple рекомендует:

Если у вас есть файл изображения, который будет отображаться только один раз, и вы хотитеубедитесь, что он не будет добавлен в системный кеш, вместо этого вы должны создать свое изображение, используя imageWithContentsOfFile :.Это исключит одноразовое изображение из кэша системных изображений, потенциально улучшая характеристики использования памяти вашего приложения.

Поэтому использование UIImage (contentsOfFile: String) 'должно решить вашу проблему.В связи с документацией вам необходимо указать путь к изображению, имя изображения недостаточно, см. Здесь:

https://developer.apple.com/documentation/uikit/uiimage/1624123-imagewithcontentsoffile

Там также упоминается:

Этот метод не кэширует объект изображения.

2.Не храните ссылки на изображения

Когда вы загружаете изображения в локальный массив, обязательно очистите его.

self.imageArray = []

3.Установите для imageView.animationImages пустой массив

self.imageArray = []
self.imageView.animationImages = self.imageArray

Быстрая проверка выделения в инструментах:

allocations in Instruments

Как вы можете видетьпамять восстанавливается.Все хорошо.

...