Я действительно рву на себе волосы, кажется, у меня серьезные проблемы с управлением памятью в приложении для iOS.
Вот случай: сначала я загружаю таблицу. Когда пользователь нажимает на ячейку, она представляет собой сложный вид. Наибольшее потребление памяти в представлении связано с тем, что оно загружает 20+ UIImage
s 500x500. В этом представлении есть еще две вкладки, загружающие список медиа (эти UIImage
, но затем в виде таблицы) и еще одна простая таблица.
Когда я возвращаюсь к первому представлению таблицы, очевидно, что в куче все еще выделено более 250 КБ. Я знаю, что вид сложен, но нет причин сохранять так много памяти. И угадайте, что, когда я часто переключаюсь на представление, в конце концов у приложения заканчивается память, и оно закрывается.
Что я пытался решить:
- Исправьте все проблемы с анализом, чтобы больше не было утечек.
- Снова проверьте все
init
на освобождение, используяautorelease
, где это возможно. - Проверка всех утечек памяти с помощью Инструменты -> Утечки. За время выполнения 6 я получаю не более 2-3 утечек.
- Наконец, Инструменты -> Распределение, проверка кучи. Вот что меня смущает, между двумя отмеченными хипшотами получается разница в 250+ кБ. Я изучил это, используя подробные представления. Я не могу понять это: когда он указывает на один из моих методов/классов, я почти уверен, что все там либо выпущено, либо автоматически выпущено. Это также указывает на множество не моих (скажем,
QuartzCore
) методов/классов.
Кроме того, я не понимаю, почему autorelease
не выпускается автоматически. Я имею в виду, иногда это выглядит так, как будто объект, помеченный для автоматического выпуска, выпущен слишком поздно. Я сам не создавал NSAutoreleasePool
, поэтому возможно ли, что пул сливается только тогда, когда среда выполнения останавливается? Как можно периодически сливать пул (даже если он не мой).
Любая помощь приветствуется.
С уважением,
Рейндер
Используется для проверки кучи: http://www.friday.com/bbum/2010/10/17/when-is-a-leak-not-a-leak-using-heapshot-analysis-найти-нежелательный-рост-памяти/