0

不确定我问的是否正确,但无论如何我都会尝试一下。

我有一个程序可以调用这段代码......

[localCalculateTimeFiles addObserver:self
       forKeyPath:@"arraystatuscounter"
          options:NSKeyValueObservingOptionNew
          context:NULL];

最终 localCalculateTimeFiles 消失了,我想 removeObserver 当前的代码位(粗略地说)。如果我什么都不做并且 localCalculateTimesFiles 消失而我没有执行正确的 removeObserver,则运行时会引发异常。我认为它过去更像是一个警告,但现在程序异常终止。

假设我在正确的时间将所有对象指针正确并指向正确的位置。我想做的是让 localCalculateTimeFiles 在释放观察者的途中(可以这么说)删除观察者。

似乎根据 Apple 文档,我可以向 localCalculateTimeFiles 添加一个看起来像这样的方法来完成这项工作......

- (void)finalize {
    if (log_file != NULL) {
        fclose(log_file);
        log_file = NULL;
    }
    [super finalize]; 
}

我将用注销观察者的新逻辑替换处理 log_file 的逻辑。显然,我必须确保我的所有指针都是正确的,以确保 removeObserver 方法具有正确的操作项。让我正确地做到这一点,这是有道理的还是我完全离开了?

4

1 回答 1

4

我不认为 finalize 是正确的地方。

注销观察的最佳位置是在您的dealloc方法中,该方法在对象被删除之前调用。

于 2012-11-04T05:27:55.290 回答