gpt4 book ai didi

objective-c - 方法仍在运行时调用 Dealloc

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:15:09 26 4
gpt4 key购买 nike

在我正在处理的一个项目中(我选择了这段代码并一直在尝试对其进行调试),我有一个被观察者调用的函数。观察者调用一个方法来更新要放在屏幕上的数据。进行此更新时(更新需要几秒钟),用户可以按导航栏上的“后退”按钮,这会导致发生 dealloc 调用。当该方法运行时,dealloc 调用会释放所有 ivar,最终会在该方法尝试访问 ivar 时导致 EXC_BAD_ACCESS。更新方法的结构也包含在 @synchronized block 中。

- (void)update {

@synchronized(self){
// some code here...
// Also access ivars here.
}

}

如何告诉 Controller 在解除分配之前先完成方法?我试过在 dealloc 中运行带有条件的 while 循环,但这似乎效率不高。如果 Controller 被释放,它也永远不会完全执行,并处于死锁状态。我觉得解决方案很简单,但我的大脑因一天的工作而焦躁不安,无法思考。

最佳答案

您可以在self 上调用retain 以确保在运行较长的运行方法时引用计数不会达到零;并以这种方式避免 dealloc:

- (void) update {
[self retain]

// do work ...

[self release]
}

关于objective-c - 方法仍在运行时调用 Dealloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11127683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com