Я только что провел неделю, выискивая проблему EXC_BAD_ACCESS
в большом приложении, которое работало нормально, прежде чем преобразовать его в ARC. Я бы получил EXC_BAD_ACCESS
на закрывающей скобке конструкции "switch". Тем не менее, NSZombieEnabled
и различные настройки инструмента ничего для меня не обнаружат.
Что исправило, так это наложение кудрей вокруг дела, которое имело значение. Я сделал это для каждого из них, хотя, возможно, это было критично только для некоторых, то есть
До:
case ...:
stmt;
stmt;
break;
После того, как:
case ...:{
stmt;
stmt;
}break;
Это решило проблему в двух местах в большом приложении для меня. Я знаю, что где-то читал о ARC и switch / case (и, возможно, кто-то может добавить ссылку на него), но я не понимаю теорию, почему это произошло и почему это исправление сработало. Возможно, кто-то мог объяснить. (Позже: после прочтения следующей ссылки в openradar, все это имеет смысл - что-то не так в "коде очистки", сгенерированном между инструкциями case - генерируется поддельный "релиз", который вскоре вызывает EXC_BAD_ACCESS
.)
Я также обнаружил, что это может быть связано: http://openradar.appspot.com/11329693