Как определить, какие объекты содержат ссылки на другие объекты, которые вызывают утечку памяти в objective-c?

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

Я заметил (добавив инструкции отладки в методе dealloc), что dealloc не вызывается для этих объектов.

Как определить, какие объекты содержат ссылки на эти объекты и не позволяют их освободить?

Ответ 1

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

Ответ 2

Если вам нужно посмотреть, где сохраняются, выпускаются и автореализовываются для инструментов использования объекта:

Запуск в инструментах, в Allocations установить "Запись отсчетов" включен (вы должны остановить запись, чтобы установить параметр). Попробуйте запустить сборщик, остановить запись, найти там ivar (datePickerView), развернуться, и вы сможете увидеть, где все сохраняется, выпуски и автореализаторы произошли.

enter image description here

Ответ 3

Я бы начал с создания и анализа проекта (команда Shift в среде IDE).

Ответ 4

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