Управление памятью / Инструменты на iPhone - PullRequest
2 голосов
/ 16 марта 2011

Я занимаюсь разработкой приложения для чтения RSS для iPhone, и оно близится к завершению, однако вчера я обновился до Xcode 4 с iOS 4.3, и у меня возникли серьезные проблемы с памятью.Мое приложение теперь часто получает предупреждения о памяти, я обрабатываю didReceiveMemoryWarning и освобождаю все мои кэшированные изображения и т. Д., Но это не обеспечивает хорошего взаимодействия с пользователем.Я также использовал инструменты для диагностики проблемы, но это вызывает больше вопросов, чем ответов.

• Использует ли SDK 4.3 больше памяти?Я не получал предупреждения памяти, прежде чем я обновил.Не уверен, что это актуально или нет, но я делаю большую часть своего тестирования на iPhone 3G с iOS 4.2 на нем (4.3 не поддерживается на 3G).

• Почему инструмент инструмента выделения ресурсовСтолбец живых байтов не соответствует столбцу реальной памяти в инструменте мониторинга активности?Инструмент мониторинга активности всегда сообщает о большем использовании памяти.

• В соответствии с утечками мое приложение не теряет память ни в симуляторе, ни на реальном iPhone, но когда я смотрю на распределение, кажется, что при переходепросмотры, а затем всплывающие представления, столбец живых байтов не возвращается к своему предыдущему значению, что согласуется с утечкой памяти?(Да, подпредставления освобождаются после извлечения)

• Мое приложение часто сообщает о предупреждении памяти при запуске, но только когда я профилирую приложение с утечками.Вызывает ли утечка дополнительную нагрузку на память?

• Возможно, на этот вопрос сложно ответить, но каков разумный объем памяти для приложения iPhone?Когда я запускаю утечки, мое приложение почти наверняка будет убито из-за нехватки памяти через несколько минут, но при выделении в средстве утечки сообщается, что я использую менее 2 МБ при завершении работы приложения.

• Почему прибор мониторинга активности имеет столбец для виртуальной памяти?Все, что я прочитал, гласит, что iPhone не использует виртуальную память?

1 Ответ

0 голосов
/ 16 марта 2011

4.3 SDK, вероятно, использует больше памяти, но если это вопрос, который вы задаете, то вы, вероятно, на неправильном пути, потому что как разработчик не должен учитывать, насколько стабильно ваше приложение.

Я бы не беспокоился о несоответствии между тем, что сообщает Allocations, и отчетом Activity Monitor. Кроме того, нет ничего необычного в том, что объем памяти увеличивается, так как представления выталкиваются и выталкиваются, а не сжимаются. Другой ответ на как free(3) работает объясняет это явление более подробно.

Разумный объем памяти для приложения iOS - это минимальное количество, необходимое вашему приложению для функционирования.

iOS действительно использует виртуальную память. Из рекомендаций Apple по производительности использования памяти / О системе виртуальной памяти :

В Mac OS X и iOS имеется полностью интегрированная система виртуальной памяти, которую нельзя отключить; это всегда включено. Обе системы также предоставляют до 4 гигабайт адресуемого пространства на 32-разрядный процесс.

...

Хотя Mac OS X поддерживает резервное хранилище, iOS - нет. В приложениях для iPhone данные только для чтения, которые уже находятся на диске (например, кодовые страницы), просто удаляются из памяти и при необходимости перезагружаются с диска. Записываемые данные никогда не удаляются из памяти операционной системой. Вместо этого, если объем свободной памяти падает ниже определенного порогового значения, система просит запущенные приложения добровольно освободить память, чтобы освободить место для новых данных. Приложения, которые не могут освободить достаточно памяти, закрываются.

Я рекомендую вам прочитать весь документ, особенно Поиск утечек памяти . Вы также можете использовать функцию Build-and-Analyze, которая использует встроенный Clang для статического обнаружения нескольких типов ошибок, включая утечки памяти.

...