ARC круговое удержание обнаружения - PullRequest
10 голосов
/ 04 февраля 2012

Я перенес старый код в Objective-C ARC (автоматический подсчет ссылок), и он, кажется, работает отлично.За исключением того, что довольно большой высокоуровневый объект не освобождается, когда он извлекается из моего стека навигации, что заставляет меня поверить, что у меня есть цикл сохранения где-то, что ARC скрыл от меня (или, по крайней мере, затруднил его отслеживание).Каков наилучший способ отсеять этот потенциальный цикл сохранения и / или как определить причину утечки памяти при ARC?Спасибо!

Ответы [ 3 ]

26 голосов
/ 26 января 2013

Я только что перевел старое приложение на ARC. Инструменты не показали утечек, но распределение продолжало расти. Я обнаружил, что, глядя на живые объекты на предмет того, что, как я знал, должно быть удалено, я смог отследить остатки без выпуска. Вот основные шаги:

  1. Используйте инструмент Распределения в Инструментах
  2. Поиграйте с приложением некоторое время (если вы знаете, что не выходит, это будет происходить быстрее)
  3. Изменить статистику на объекты в панели перехода Распределения
  4. Сортировка по категории и поиск имени класса вашего невыпущенного объекта
  5. Найдите живой экземпляр и нажмите маленькую стрелку вправо рядом с адресом памяти
  6. Теперь вы можете увидеть историю удержаний и выпусков для объекта

Screenshot of object history in Instruments

16 голосов
/ 04 февраля 2012

Лучше всего обычно использовать инструмент Leaks в приложении Instruments .

The Что нового в инструментах видео с WWDC 2011 обсуждается использование инструментов для поиска циклов сохранения в ARC, начиная примерно через 38 минут.

0 голосов
/ 04 января 2017

X-код 8 представил инструмент отладки графа памяти: enter image description here

смотрите здесь для полной справки:

https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/debugging_with_xcode/chapters/special_debugging_workflows.html#//apple_ref/doc/uid/TP40015022-CH9-DontLinkElementID_1

...