Подтвердить что ты не робот

Поиск всех ссылок на экземпляр объекта в Obj-C

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

В любом случае, посмотрите на экземпляр объекта в Objective-C и посмотрите, какие еще объекты еще имеют ссылку на этот объект?

4b9b3361

Ответ 1

Я бы рекомендовал использовать шаблон Allocations/ObjectAllocations Instruments, а затем в правом верхнем углу введите имя класса вашего объекта (в поле Category).

Затем вы можете видеть, что распределения увеличиваются по мере того, как вы предлагаете, и, просмотрев расширенные детали, вы можете видеть, где они были выделены.

Все содержимое ниже этого пункта было добавлено OP (joshbuhler)

На скриншоте ниже измените фильтр на "Список объектов", а затем, щелкнув по маленькой стрелке справа от адреса объекта, будет отображаться история событий памяти (alloc/keep/release/dealloc) для этого объекта. Он не покажет вам точно, что висит на этом объекте, но это даст вам очень полезную информацию для его отслеживания.

enter image description here

Ответ 2

Если вы используете xCode, вы можете использовать инструменты Performance, чтобы найти утечки памяти. Это даст вам хороший график распределения всей памяти и освобождения или утечки.

xcode → run → Начать работу с инструментами производительности → Утечки.

Средства обнаружения утечки памяти

Ответ 3

Предостерегающий хвост::) В процессе поиска утечки памяти я установил точку останова (действительно логическую точку) в Xcode, которая будет регистрировать значение self, когда оно было вызвано проблемный logpoint изображение. Тем временем я обнаружил утечку и исправил ее, но использование памяти не выровнялось, и мой де-init никогда не вызывался. Лог-точка, которую я установил ранее, фактически привела к тому, что показатель удержания моего объекта увеличился и, в свою очередь, помешал де-init получить вызов. Мне довелось обнаружить это после нескольких часов диких гусиных преследований, которые завершились тем, что я шаг за шагом прохожу через мои методы объектов, выдавая p CFGetRetainCount (self) из консоли отладки. Когда я перешагнул линию с лог-точкой, счет сохранения увеличился. Сначала я предположил, что это был какой-то странный побочный эффект моего кода. Я переместил этот logpoint, чтобы установить нормальную точку останова на этой строке, и моя проблема переместилась с ней. Я отключил logpoint, и утечка исчезла. Надеюсь, это поможет кому-то другому.