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