Инструменты не показывает мне реальный счетчик ссылок - PullRequest
0 голосов
/ 05 марта 2012

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

Для отладки я включаю NSZombies, а затем использую профиль Zombies с инструментами. Затем я достигаю точки, когда мое приложение падает, и Instruments информирует меня о том, что сообщение отправлено в освобожденный экземпляр. Пока все хорошо.

Он очень хорошо показывает, где библиотеки, такие как UIKit, выпускают и сохраняют указатель на мой объект, но не показывает, где мой собственный код делает это. Это также не отображает истинный счетчик ссылок. К тому моменту, когда Instruments сообщает, что счетчик ссылок равен 1, счетчик ссылок фактически равен 8 согласно распечатке счетчика ссылок в gdb.

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

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

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Вы не можете полагаться на счетчик ссылок, поскольку классы Apple Framework могут содержать свои собственные ссылки на ваши объекты.Подсчет ссылок не имеет смысла для отладки.

0 голосов
/ 19 июля 2013
  1. Нажмите в (i) слева от графика размещения
  2. Установить "Счетчик ссылок на записи"
  3. Готово;)

Activate reference count

...