При сворачивании приложения iOS не освобождает память. Как исправить?
Доброго времени суток! Пишем первое приложение под iOS( на xcode, one view application), практически все готово, но заметили, что если свернуть приложение, а затем развернуть - оно каждый раз отъедает оперативную память и с каждым разом все больше и больше. ARC используется, instruments-> leaks ничего не показывает, но графики в allocations растут как на дрожжах. Судя по всему это картинки на кнопках, бэкграунд и так далее.
Пытался кнопкам задавать картинки не через редактор в xcode, а программно и переходе с со "сцены" на "сцену" чистить(myButtonImage = nil) - результат не меняется. Укажите нубу что не так? :)
В инструментах если кликать на утечки/не освобожденные объекты, потом открыть правое меню, то будут указаны методы, в которых они происходят. Далее кликая на эти методы, укажет и конкретную строчку кода. А там уже разбирайтесь с конкретными проблемами.
Картинки
Сами по себе картинки и бэкграунд из интерфейс буилдера так утекать не должны. Скорее всего проблемы в других местах.
Обнаружилась проблема в строке которая на кнопку устанавливает картинку: [myBtn setImage:myUIImage] forState:normal];
Не смотря на то, что я после этого пишу "myUIImage = nil;" картинка в памяти все равно висит.
UIControlStateNormal - это одно из значений enum'а UIControlState. Что такое normal - одному Вам должно быть известно. Как Вы обнаружили, что проблема именно в этой строке? Закоментировали и утечка пропала?
normal тоже самое что и UIControlStateNormal, тот же enum. Тоже берется из какого-то стандартного .h файла.
Обнаружил закоментировав строчку и через instruments -> allocations смотрю UIImage. У меня 3 картинки на кнопках и при переходе на другой view на том же storyboard они не уничтожаются, а при возвращении на неё же память выделяется еще под 3.
Сделал просто эксперимент: Создал пустой проект(one view application), добавил на storyboard два view на каждый по кнопке, через панель инструментов назначил этим кнопкам разные изображения и сделал так что бы при нажатии на кнопки текущая сцена скрывалась и показывалась другая. Итог тот же. Изображение на кнопке не уничтожается и при каждом переходе на другой view почему то отъедается память много больше этой картинки(вес картинки 200кб, отъедается около 1мб). В нашем проекте таких картинок 3 и отъедается каждый раз около 5мб.
@agee UIControlStateNormal определяется нулём, normal определяется тоже нулём, так что они чисто программно идентичны, но с логической точки зрения необходимо использовать UIControlStateNormal. @barabansheg залейте куда-нибудь этот проект с отъеданиями памяти. Посмотрим.