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