Почему у меня утечки памяти при использовании инструментов на устройстве, а не на симуляторе - PullRequest
3 голосов
/ 19 июля 2010

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

Почему я могу обнаружить одну утечку памяти при использовании Инструментов и моего устройства, но не при использовании симулятора iPhone?Я понимаю, что это вопрос высокого уровня, но я не думаю, что размещение какого-либо кода поможет в любом случае (довольно много кода ...).

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

Заранее спасибо!

С уважением, Никлас

Обновление: может ли это быть связано с тем, что OSX имеет автоматический сборщик мусора, а iOS нет?

Ответы [ 2 ]

8 голосов
/ 20 июля 2010

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

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



Еще несколько советов, которые могут вам пригодиться:

Для более плавного сеанса отключите «Автоматическую проверку на наличие утечек» и вручную нажмите кнопку «Проверить на наличие утечек сейчас», если необходимо.

Команда «Построить и проанализировать» сделает фантастическую работу, чтобы помочь вам найти утечки.Это не (полностью) волшебно, поэтому он не найдет все утечки.Например, утечка iVars не будет идентифицирована.Но с точки зрения метода это просто потрясающе.
Я настоятельно рекомендую активировать флаг "Run Static Analyzer" в настройках вашей сборки (или только для режима Release, если у вас медленная компиляция машины).

Если вам нужна дополнительная информация о том, как использовать инструменты для поиска утечек, прочитайте этот документ Apple: Руководство пользователя инструментов: встроенные инструменты и Руководство пользователя инструментов: просмотр и анализ данных трассировки> Поиск утечек памяти
Вы также можете посмотреть видео сессий, связанных с WWDC.
Если вы все еще не понимаете, откуда произошла утечка, пришло время (пере) прочитать Руководство по программированию управления памятью .

Спасибо за желание отправить приложение без утечек.С iOS 4 это теперь важнее, чем когда-либо.

0 голосов
/ 20 июля 2010

Если вы еще не взглянули на удобную опцию «Построить и проанализировать» в меню сборки.Он будет запускать статический анализатор, который обычно отлично работает.Если с этим ничего не получится, вы могли бы когда-нибудь просмотреть видео сессий WWDC на Instruments.

Ничто не заменит профилирование на оборудовании, а с подключенным отладчиком и инструментами вы можете получить все, что вы хотели бы в контексте симулятора.

...