2017-02-06 19 views
2

Я тестировал множество библиотек с аймировыми файлами с открытым исходным кодом для загрузки GIF файлов в наш проект Swift.Загрузка GIF-файлов в iOS потребляет слишком много памяти

Большинство из них заявляют, что являются высокопроизводительными библиотеками, однако, когда я загружаю анимированный gif, мое приложение использует около 8 МБ памяти.

Проблема в том, что это выделенное пространство памяти, кажется, никогда не будет выпущено. Мы можем видеть, как он растет линейно:

enter image description here

И это заставляет меня задаться вопросом, если я делаю то, что нужно здесь. Правильно ли это поведение, или это потенциально плохо для пользователя?

+0

Вы испытываете это с помощью тренажера или на самом устройстве? – Pierce

+0

Также вы используете сторонние библиотеки? – Pierce

+0

@ Пирс это исходит от реального устройства. И это похоже на обычное поведение, поскольку я уже пробовал GIFU, SwiftyGif и некоторые другие. – Machado

ответ

4

вам нужно будет удалить изображения Gif вручную, чтобы они могли очиститься из памяти.

Пример: gifViwer может быть вашим Gif просмотра в этом примере

self.gifViewer.removeFromSuperview() 
self.gifViewer = nil 

, если вы должны были назначить делегат, то вы можете также добавить

self.gifViewer.Delegate = nil 

Примечания: вам нужно запустите это, когда viewControler будет полностью разгружен, так как приложение начнет искать gifViewer в представлении, пока оно будет удалено. если вам нужно очистить gif-изображение из памяти, не выгружая представление, я предлагаю использовать вышеописанные шаги, а затем программно добавлять представление в супервизор. это не будет работать с дизайнером интерфейса и IBOutlets

let gifViewer = yourGifViewerClass(frame: CGRect(x: 20, y: 20, width: self.view/2, height: self.view/2)) 
    // setup your gifViewer 
+0

Достаточно удалить из супервизора. Объект не освобождался из памяти (и я понятия не имею, зачем мне это нужно). – Machado

+0

Объекты будут освобождаться только из памяти, если использование становится очень высоким, а 'didReceiveMemoryWarning' называется @Machado – Mentos

+0

Спасибо @Mentos, но это создается внутри диалогового окна, который запускает метод для удаления всех просмотров из супервика перед закрытием. Вот почему мне это показалось странным. – Machado