在我正在处理的一个项目中(我拿起了这段代码,我一直在尝试调试它),我有一个被观察者调用的函数。观察者调用一个方法来更新要放在屏幕上的数据。在发生此更新时(更新需要几秒钟),用户可以按导航栏上的“返回”按钮,这会导致发生 dealloc 调用。当方法运行时,dealloc 调用释放所有 ivars,当方法尝试访问 ivars 时,最终会导致 EXC_BAD_ACCESS。更新方法的结构也包含在一个@synchronized
块中。
- (void)update {
@synchronized(self){
// some code here...
// Also access ivars here.
}
}
可以做些什么来告诉控制器在解除分配之前先完成该方法?我尝试在 dealloc 中运行带有条件的 while 循环,但这似乎效率不高。如果控制器被释放,它也永远不会完全执行,并处于死锁状态。我觉得解决方案很简单,但是我的大脑因一整天的工作而煎熬,我无法思考。