Я нажал ALT + CMD + R и активировал NSZombieEnabled в Аргументы> Переменные окружения. Кроме того, я активировал его в меню «Диагностика»> «Управление памятью»> «Включить объекты-зомби».
Однако, когда я собирал и запускал, в какой-то момент мое приложение зависало, давая мне это бесполезное сообщение в консоли:
*** -[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.
Инструмент Зомби (CMD + I), наконец, указал, что он имеет отношение к кнопке. Просто не знал почему и где.
Clang Static Analyzer не жаловался на этот очевидный сбой.