Помогите найти утечки памяти (общие советы) - PullRequest
3 голосов
/ 18 января 2011

Это на iOS, устройство iPad.

Вот что происходит:

  1. Я запускаю приложение на устройстве или отлаживаю и запускаю с помощью Xcode.
  2. ПослеЧерез 5 минут я получаю предупреждение памяти уровня 1.
  3. Через минуту я получаю предупреждение памяти уровня 2.
  4. Еще минуту спустя Program received signal: “0”.

Я проверил утечки с помощью утечек в приборах и не обнаружил утечек .Однако, согласно данным Activity Monitor, мое приложение изначально использует 30 МБ и со временем увеличивается до более чем 100 МБ (около 200 КБ в секунду!).Итак, очевидно, что утечки не обнаруживают все утечки памяти.

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

Ответы [ 3 ]

6 голосов
/ 18 января 2011

Вот как я бы подошел:

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

  2. XCode-> Run-> Run with tool performance-> allocations

Теперь остановите ваше приложение и введите имя класса, который, как вы подозреваете, просачивается в поле поиска.(это где префикс удобен).Снова запустите инструменты с помощью кнопки «Запись»

  1. Живой столбец должен подниматься и опускаться при выделении объектов.Обратите внимание, если это не происходит, у вас есть утечка.
1 голос
/ 18 января 2011

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

0 голосов
/ 18 января 2011

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

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

...