Обнаружение круговой фиксации ARC

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

Ответ 2

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

  • Используйте инструмент "Распределения" в "Инструменты"
  • Играйте с вашим приложением некоторое время (если вы знаете, что не выпускается, это происходит быстрее).
  • Изменить статистику по объектам в панели прокрутки Allocations
  • Сортировка по категории и поиск имени класса вашего невыпущенного объекта
  • Найдите живой экземпляр и щелкните маленькую стрелку справа рядом с адресом памяти
  • Теперь вы можете просмотреть историю сохранений и выпусков для объекта

Screenshot of object history in Instruments