Как определить, какие объекты содержат ссылки на другие объекты, которые вызывают утечку памяти в objective-c?
Я попытался использовать инструмент утечек и "проанализировать" и т.д., чтобы найти утечку, но он не может ее найти. Используя распределения, я могу определить объекты, которые не выпущены.
Я заметил (добавив инструкции отладки в методе dealloc), что dealloc не вызывается для этих объектов.
Как определить, какие объекты содержат ссылки на эти объекты и не позволяют их освободить?
Ответы
Ответ 1
Инструмент анализа не смог обнаружить проблему. Использование инструмента распределения для захвата всех отсчетов ссылок было началом, но было так много классов, которые я не узнал, или напрямую доступ к ним, я не смог отслеживать проблему с помощью этого метода. Вместо этого я составил список классов, за которые я непосредственно отвечал, и исследовал каждую из них по строкам, пока не нашел проблемы. Причина заключалась в том, что я использовал некоторые сторонние библиотеки, которые не уменьшали количество оставшихся объектов, как ожидалось. Думаю, в этом случае, следуя лучшим принципам разработки программного обеспечения/шаблонам проектирования, а также с тщательной проверкой кода, возможно, проблема возникла раньше.
Ответ 2
Если вам нужно посмотреть, где сохраняются, выпускаются и автореализовываются для инструментов использования объекта:
Запуск в инструментах, в Allocations установить "Запись отсчетов" включен (вы должны остановить запись, чтобы установить параметр). Попробуйте запустить сборщик, остановить запись, найти там ivar (datePickerView), развернуться, и вы сможете увидеть, где все сохраняется, выпуски и автореализаторы произошли.
![enter image description here]()
Ответ 3
Я бы начал с создания и анализа проекта (команда Shift в среде IDE).
Ответ 4
Вы можете перегружать реализации сохранения/выпуска/автозагрузки в проблемных классах (если это класс SDK, можно использовать категорию) и установить там точку останова. Ваша точка останова будет ударяться каждый раз, когда что-то сохраняет ваш объект.