я нажал ALT+CMD+R и активировал NSZombieEnabled в Arguments > Environment Variables. Кроме того, я активировал его в Diagnostics > Memory Management > Enable Zombie Objects.
Однако, когда я собрал и запустил приложение, в какой-то момент оно аварийно завершается, выдавая в консоль вот такое бесполезное сообщение:
*** -[CALayer retainCount]: message sent to deallocated instance 0x656b260
Трассировка стека так же бесполезна. Я передвинул ползунок уровня детализации до упора вправо. Поток 1 просто показывает мне следующее:
Все принадлежит системе, и нет ни одной строки, связанной с моим приложением. Так что, очевидно, NSZombiesEnabled не работает, как это было в Xcode 3, где он останавливался на мертвом объекте.
Есть ли способ выяснить, какой CALayer деаллоцируется слишком рано?
Обновление: Итак, после сборки и запуска еще около 100 раз проблема внезапно РАЗРЕШИЛАСЬ! Она полностью исчезла! И что самое интересное: Я никак не изменял свой код! Между этим я несколько раз очищал папку сборки и проект командами clean и несколько раз удалял приложение в симуляторе.
Обновление 2: К счастью, проблема снова появилась. И теперь она кажется постоянной. К счастью, потому что я предпочитаю найти первопричину, а не раздражать пользователей случайным образом.
Обновление 3: Наконец-то случайно нашел:
startButton = newBttn;
должно было быть:
self.startButton = newBttn;
startButton был сохраняемым свойством, и в -dealloc я его освободил. Таким образом, она была освобождена слишком сильно, и в большинстве случаев (но не во всех) после затухания представления она падала, выдавая странное сообщение CALayer retainCount.
Zombies Instrument (CMD + I) наконец-то указал, что это связано с кнопкой. Только не было понятно, почему и где.
Статический анализатор Clang не пожаловался на этот очевидный глюк.