Я пытаюсь отладить проблему, когда объект освобождается слишком много раз, а затем освобождается в цикле событий. В следующий раз, когда я пытаюсь прочитать объект, происходит сбой приложения с EXC_BAD_ACCESS.
Для отладки я включаю NSZombies, а затем использую профиль Zombies с инструментами. Затем я достигаю точки, когда мое приложение падает, и Instruments информирует меня о том, что сообщение отправлено в освобожденный экземпляр. Пока все хорошо.
Он очень хорошо показывает, где библиотеки, такие как UIKit, выпускают и сохраняют указатель на мой объект, но не показывает, где мой собственный код делает это. Это также не отображает истинный счетчик ссылок. К тому моменту, когда Instruments сообщает, что счетчик ссылок равен 1, счетчик ссылок фактически равен 8 согласно распечатке счетчика ссылок в gdb.
Я исследовал возможность того, что Instruments каким-то образом фильтрует выходные данные, но может показаться, что я действительно записываю каждый релиз и сохраняю событие. Это обязательно должно быть что-то в моем приложении, потому что мой контроллер представления мгновенно освобождается после отображения, что означает, что попытка сделать что-либо, что отправит сообщение контроллеру, приведет к его падению.
После помещения точки останова в метод dealloc я обнаружил, что мой объект действительно освобождается циклом обработки событий, так что это не случай мошеннического вызова dealloc чем-то другим.