KVO和ARC如何删除Observer

时间:2011-08-05 16:58:44

标签: ios cocoa-touch key-value-observing automatic-ref-counting

如何从ARC下的对象中删除观察者?我们只是添加观察者并忘记删除它吗?如果我们不再手动管理内存,我们会从观察中退出吗?

例如,在视图控制器上:

[self.view addObserver:self
            forKeyPath:@"self.frame"
               options:NSKeyValueObservingOptionNew 
               context:nil];

以前,我会在视图控制器的removeObserver:方法中调用dealloc

2 个答案:

答案 0 :(得分:126)

您仍然可以在ARC下实施-dealloc,这似乎是删除关键值观察的适当位置。您只是不再在此方法中调用[super dealloc]

如果您之前覆盖-release,那么您做错了事。

答案 1 :(得分:0)

我使用此代码

- (void)dealloc
{
@try{
    [self.uAvatarImage removeObserver:self forKeyPath:@"image" context:nil];
} @catch(id anException) {
    //do nothing, obviously it wasn't attached because an exception was thrown
}
}