В проекте, над которым я работаю (я взял этот код, и я пытался его отладить), у меня есть функция, вызываемая наблюдателем. Наблюдатель вызывает метод, который обновляет данные, которые должны быть помещены на экран. Хотя это обновление происходит (требуется несколько секунд для обновления), пользователь может нажать кнопку «Назад» на панели навигации, что вызывает вызов dealloc. Пока этот метод запущен, вызов dealloc освобождает все ivars, что в конечном итоге вызывает EXC_BAD_ACCESS, когда метод пытается получить доступ к ivars. Структура метода обновления также прилагается к блоку @synchronized
.Dealloc вызывается, пока метод все еще запущен
- (void)update {
@synchronized(self){
// some code here...
// Also access ivars here.
}
}
Что можно сделать, чтобы сообщить контроллеру закончить метод сначала перед освобождением? Я попытался запустить цикл while с условием в dealloc, но это не кажется эффективным. Он также никогда не выполняется полностью, если контроллер освобожден и находится в тупике. Я чувствую, что решение прост, но мой мозг жарится с длинного рабочего дня, и я не могу думать об этом.
Обратите внимание, что вы не можете сделать это под автоматическим подсчетом ссылок. – benzado
Это решило проблему для меня! Я не понимал, насколько это было глупо. Благодаря! – SpacePyro