Лучший подход к отладке приложенияDidReceiveMemoryWarning на iPhone? - PullRequest
9 голосов
/ 20 марта 2009

Нужен совет, как это отладить. Я новичок в ограниченных средах и у меня нет опыта программирования на встраиваемых или смартфонах, поэтому я могу использовать некоторые подсказки. Уже в курсе: Инструменты, статический анализ Clanger, ручная проверка кода и т. Д. Инструменты, кажется, в целом очень полезны, но довольно трудоемки и отнимают много времени! Clanger также очень помог мне. Кажется, что я просто потребляю слишком много памяти в целом, и мне интересно, что такое хорошая стратегия. Я выпускаю несколько объектов верхнего уровня? Есть ли «предпочтительная стратегия»?

Просто интересно, справился ли кто-нибудь с этим успешно и есть ли другие предложения? Спасибо всем.

Ответы [ 2 ]

5 голосов
/ 21 марта 2009

В приложении для iPhone есть много хороших статей для управления памятью. Вот несколько полезных ссылок.

Вещи, которые вы должны в целом заботиться

  1. Отпустить любые переменные, которые вам не нужны
  2. Всегда обрабатывать didReceiveMemoryWarning и освобождать любые переменные, которые не используются
  3. Остановите любые процессы с большим объемом памяти в applicationDidReceiveMemoryWarning, такие как воспроизведение аудио / видео, UIImagePickerController и т. Д.

EDIT Это больше не применяется. imageNamed: имел проблемы с кешированием до 3.x версий ОС. Эта проблема больше не существует, и вы должны использовать imageNamed: (облегчает реализацию отображения сетчатки)

  1. НЕ используйте imageNamed: для создания объектов UIImage.
2 голосов
/ 20 марта 2009

В основном вы получаете это предупреждение, потому что (неудивительно), что у iPhone опасно мало памяти. Обычно это может происходить по одной из двух причин:

  1. У вас утечка памяти.
  2. Вы выделяете слишком много объектов и вам необходимо пересмотреть свой дизайн.

Для первого вы должны запустить инструменты и проверить распределение памяти. Это действительно может замедлить работу вашего приложения (и требует дополнительной памяти), поэтому попробуйте тестировать области своего приложения по одному. Например. если у вас есть несколько представлений, переключайтесь между ними пару раз.

Во-вторых, вам нужно будет изучить, что вы делаете, что может привести к большому выделению памяти. Например, если вы пишете браузер Flickr, вам может понадобиться сократить количество загруженных вами изображений в любое время или освободить некоторые неиспользуемые, когда вы получите это предупреждение.

Это единственные общие правила, которые я могу предложить, не зная больше о вашем приложении.

К сожалению, нет реального способа (о котором я знаю) получить данные о текущем распределении памяти в iPhone OS. Это действительно затрудняет выделение областей вашего приложения, которые непреднамеренно потребляют память.

...