Я портировал старый код на Objective-C ARC (автоматический подсчет ссылок), и, похоже, он отлично работает. За исключением того, что довольно большой объект высокого уровня не освобождается, когда он удаляется из моего навигационного стека, заставляя меня поверить, что у меня есть цикл сохранения где-то, что ARC скрыл от меня (или, по крайней мере, было трудно отследить). Каков наилучший способ отсеять этот потенциальный цикл удержания и/или то, что является хорошим способом определить причину утечки памяти при ARC? Спасибо!
Обнаружение круговой фиксации ARC
Ответ 1
Лучше всего использовать инструмент "Утечки" в приложении "Инструменты" .
В видеоролике What New In Instruments из WWDC 2011 обсуждается использование инструментов для поиска циклов сохранения в ARC, начиная примерно через 38 минут.
Ответ 2
Я просто перешел на старое приложение, чтобы использовать ARC. У приборов не было никаких утечек, но распределения продолжали расти. Я обнаружил, что, глядя на живые объекты, что-то, что я знал, должно быть удалено, я смог отследить остатки без релиза. Вот основные шаги:
- Используйте инструмент "Распределения" в "Инструменты"
- Играйте с вашим приложением некоторое время (если вы знаете, что не выпускается, это происходит быстрее).
- Изменить статистику по объектам в панели прокрутки Allocations
- Сортировка по категории и поиск имени класса вашего невыпущенного объекта
- Найдите живой экземпляр и щелкните маленькую стрелку справа рядом с адресом памяти
- Теперь вы можете просмотреть историю сохранений и выпусков для объекта
Ответ 3
X-код 8 представил инструмент отладки памяти:
посмотрите здесь полную ссылку: