如何从ARC下的对象中删除观察者?我们只是添加观察者并忘记删除它吗?如果我们不再手动管理内存,我们会从观察中退出吗?
例如,在视图控制器上:
[self.view addObserver:self
forKeyPath:@"self.frame"
options:NSKeyValueObservingOptionNew
context:nil];
以前,我会在视图控制器的removeObserver:
方法中调用dealloc
。
答案 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
}
}