2010-07-19 4 views
3

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

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

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

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

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

Update: Может что-то делать с этим OSX оказывает автоматический сбор мусора, но IOS не делает?

ответ

7

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

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



Некоторый более совет, который вы могли бы оказаться полезным:

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

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

Если вы хотите получить больше информации о том, как использовать инструменты для поиска утечек, прочитайте этот документ компании Apple: Instruments User Guide: Built-in Instruments и Instruments User Guide: Viewing and Analysing Trace Data > Looking for Memory Leaks
Вы также можете смотреть видео из связанных WWDC сессий.
Если вы все еще не понимаете, откуда исходит ваша утечка, пришло время (пере) прочитать Memory Management Programming Guide.

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

+0

Спасибо за ваш ответ! Я уже использовал Build and Analyze, и это помогло мне найти утечки. Но, как «слишком» часто, вы что-то исправляете, а какая-то другая проблема исчезает. Я просто чистил код (в основном NSLogs и комментарии), а затем пропала утечка памяти ... И не все ли люди пытаются исправить утечки памяти ...? (Вам не нужно отвечать на этот вопрос ...;)) – Nicsoft

0

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

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

+0

Спасибо вам за ответ. Я выполнил сборку и анализ, это немного помогло мне, но также отметило некоторые «ненужные» действия (например, при распределении нового объекта, изменяемого внутри предложения if, где фактическая переменная определена перед предложением if.После возвращения объекта с " return [variable autorelease] ". Это наверняка будет выделено раньше.). – Nicsoft

Смежные вопросы