Жизнь моего iPhone была ужасной, пока я не нашел NSZombieEnabled . Добавив этот флаг в ваш исполняемый файл, он поможет вам увидеть любые проблемы с памятью, сообщив вам, как называется ошибочный объект.
Это работает, никогда не выпуская объект, а заключая его в «зомби» и устанавливая внутри него флаг, который говорит, что обычно он был бы освобожден. Таким образом, если вы попытаетесь получить к нему доступ снова, он все еще будет знать, что было до того, как вы допустили ошибку, и с помощью этой небольшой информации вы обычно можете вернуться назад, чтобы увидеть, в чем проблема.
Это особенно помогает в фоновых потоках, когда отладчик иногда выбрасывает любую полезную информацию.
ОЧЕНЬ ВАЖНО ЗАМЕЧАНИЕ однако вам необходимо на 100% убедиться, что это только в вашем отладочном коде, а не в коде дистрибутива. Поскольку ничего не выпускается, ваше приложение будет течь и течь и течь. Чтобы напомнить мне сделать это, я поместил этот журнал в моем appdelegate:
if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled"))
NSLog(@"NSZombieEnabled/NSAutoreleaseFreedObjectCheckEnabled enabled!");