首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >KVO和ARC如何removeObserver

KVO和ARC如何removeObserver
EN

Stack Overflow用户
提问于 2011-08-06 00:58:44
回答 3查看 20.2K关注 0票数 87

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

例如,在视图控制器上:

代码语言:javascript
复制
[self.view addObserver:self
            forKeyPath:@"self.frame"
               options:NSKeyValueObservingOptionNew 
               context:nil];

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-06 01:24:51

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

如果您以前覆盖了-release,那么您的做法是错误的。

票数 126
EN

Stack Overflow用户

发布于 2014-03-26 06:56:59

我用下面的代码来做

代码语言:javascript
复制
- (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
}
}    
票数 1
EN

Stack Overflow用户

发布于 2011-11-30 23:33:22

在堆栈溢出时,Chris Hanson建议使用Elsewhere方法来实现此目的,并实现一个单独的无效方法,以便所有者可以告诉对象它们已经完成。在过去,我发现Hanson的解决方案是经过深思熟虑的,所以我会这样做。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6959896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档