如何从ARC下的对象中删除观察者?我们只是添加观察者,而忘记删除它吗?如果我们不再手动管理内存,我们该从哪里退出观察?
例如,在视图控制器上:
[self.view addObserver:self
forKeyPath:@"self.frame"
options:NSKeyValueObservingOptionNew
context:nil];
以前,我会在视图控制器的dealloc
方法中调用removeObserver:
。
发布于 2011-08-06 01:24:51
您仍然可以在ARC下实现-dealloc
,这似乎是删除对键值的观察的合适位置。您只是不再从这个方法中调用[super dealloc]
。
如果您以前覆盖了-release
,那么您的做法是错误的。
发布于 2014-03-26 06:56:59
我用下面的代码来做
- (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
}
}
发布于 2011-11-30 23:33:22
在堆栈溢出时,Chris Hanson建议使用Elsewhere方法来实现此目的,并实现一个单独的无效方法,以便所有者可以告诉对象它们已经完成。在过去,我发现Hanson的解决方案是经过深思熟虑的,所以我会这样做。
https://stackoverflow.com/questions/6959896
复制相似问题