Какая память освобождается через didReceiveMemoryWarning / viewDidUnload? - PullRequest
0 голосов
/ 14 сентября 2009

У моего приложения на iPhone возникают проблемы при развертывании на устройстве, главным образом потому, что я до сих пор не обрабатывал предупреждения о памяти (никаких проблем в симуляторе с 4 ГБ оперативной памяти на моем компьютере разработчика!). Нет проблем, мне просто нужно обрабатывать эти предупреждения более умело (менее удачно ...).

Вопрос в том, какую память высвобождает среда выполнения ... только представление и подпредставления? Я подозреваю, что это только они, но хочу быть уверен, что среда выполнения не разыменует ни один из объектов или память в моем контроллере (т.е. не в представлении).

Подзапрос: если это просто представление и подпредставления, нужно ли мне делать что-то особенное в viewDidLoad, чтобы убедиться, что при возврате представления в память представление показывает правильные данные или все это обрабатывается автоматически через мой IBOutlet -s

Ответы [ 2 ]

2 голосов
/ 14 сентября 2009

Существует множество вещей, которые представление или его подпредставления могут кэшировать - например, данные изображения. Это такие вещи, которые будут очищены. Все, что специфично для вашего приложения и которое вы можете позволить себе сбросить, вам нужно сделать самостоятельно, обработав этот обратный вызов.

Тем не менее, это может быть скорее признаком того, что вы либо теряете память, либо не так эффективны с ней, как могли бы быть. Конечно, стоит запустить приложение в Instruments с инструментом Leaks, а также с помощью статического анализатора кода компилятора CLANG. Кроме того, проверьте свой код, чтобы убедиться, что вы держите блоки памяти, которые вам на самом деле не нужны - можете ли вы сжимать изображения больше и т. Д.

Помните, что до 3GS или последнего iPod touch системная память составляла 128 МБ , но вы должны рассчитывать только на то, что для вашего приложения будет доступно около 25-30 МБ

0 голосов
/ 14 сентября 2009

Ни viewDidUnload, ни didRecieveMemoryWarning ничего не освобождают автоматически. Вам необходимо переопределить оба этих метода.

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

И didRecieveMemoryWarning - это сообщение, которое отправляется вашему приложению, когда системе не хватает памяти. Когда ваше приложение получит это сообщение, вы должны выпустить все, что вам не нужно, или рискнуть тем, что система принудительно закроет ваше приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...