Я потратил на это два дня и до сих пор не могу найти причину аварии.
Я знаю, что это как-то связано с попыткой доступа к объекту, который был освобожден, но я не знаю, к какому доступу или какому объекту.
Всякий раз, когда я пытаюсь найти источник в GoogleEXC_BAD_ACCESS люди предлагают использовать NSZombies.Проблема в том, что когда я включаю зомби (либо в xcode через переменную окружения, либо в инструменты через свойства ObjectAlloc), программа не падает, как обычно, и зомби ничего не сообщают (ничего не отображается в журналах и ничего не помечено винструменты).Есть ли что-то, чего мне не хватает в NSZombie?
Я пытался использовать некоторую информацию из отладчика xcode и из ObjectAlloc в инструментах, но вся информация очень загадочная и не очень мне помогает.
Я установил отладчик для остановкина цели c исключениями.Когда он это делает, это показывает стек вызовов:
0 objc_msgSend
1 ??
2 -[UITableViewCell removeFromSuperView]
3 -[UIView dealloc]
... etc ...
Прежде всего, что за сделка с '1 ??'?Что означают знаки вопроса?Во-вторых, как я могу узнать, где это было вызвано в моем коде?Все указанные операции являются слишком общими (например, UIView dealloc, но какой UIView? И где?).
Также, когда возникает исключение, оно указывает на ассемблерный код, который, опять же, не приносит мне никакой пользы, если я не былтратить часы, пытаясь выяснить, что делает код.Я знаю некоторую сборку, но там имеет , чтобы быть лучше ... правильно?
Есть ли какой-нибудь способ, которым я могу получить значимую информацию о том, какая строка была последней в моем кодедо того, как возникло исключение?
Я пытался разбросать некоторые NSLogs и точки останова, но это мне не очень помогает, потому что сбой происходит после Я выталкиваю контроллер представления из контроллера навигации.Везде, где я размещаю точки останова, точки останова достигаются нормально (я не могу найти точку, чтобы сломать после аварии).Исключение возникает только тогда, когда я «продолжаю» в отладчике.Как будто сбой происходит вне моего кода, поэтому я понятия не имею, где его найти.
Я просмотрел свой код и дважды проверил, что я придерживаюсь всех правил управления памятью (впо крайней мере, насколько мне известно).Я уверен, что это что-то очень тонкое, но я не могу его найти.
Если у кого-то есть идеи, как найти такие ошибки без NSZombie, пожалуйста, поделитесь.
Спасибо.