不知道我在问这个问题,但无论如何我都会试一试。在对象释放期间取消注册对象的观察者
我有一个程序,它调用的代码,这一点......
[localCalculateTimeFiles addObserver:self
forKeyPath:@"arraystatuscounter"
options:NSKeyValueObservingOptionNew
context:NULL];
最终localCalculateTimeFiles消失,我想removeObserver当前代码位(说句不好听)。如果我什么都不做,并且localCalculateTimesFiles消失而没有执行正确的removeObserver,则运行时将引发异常。我认为这种方式过去常常是一种警告,但现在该方案暂停。
比方说,我在正确的时间将所有的对象指针都放在正确的位置。我想要做的是让localCalculateTimeFiles在下路(可以这么说)的时候移除观察者,当它被释放时。
看来,根据苹果的文档,我可以添加一个方法来localCalculateTimeFiles看起来像这样做的工作......
- (void)finalize {
if (log_file != NULL) {
fclose(log_file);
log_file = NULL;
}
[super finalize];
}
我更换逻辑来处理LOG_FILE新将取消注册观察者的逻辑。很明显,我必须确保我的所有指针都是正确的,以确保removeObserver方法具有正确的操作对象。给我正确的做,这是有道理的,还是我完全没有?
+1'-finalize'是a)仅由垃圾收集器调用,b)由于您在此时应该使用ARC而不是垃圾收集,因此不推荐使用。 – Caleb
好的....所以我应该简单地重做dealloc方法。我会在本周尝试一下,然后在完成工作后按下投票按钮。 –