KVO和ARC如何删除Observer

dru*_*ass 87 cocoa-touch key-value-observing ios automatic-ref-counting

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

例如,在视图控制器上:

[self.view addObserver:self
            forKeyPath:@"self.frame"
               options:NSKeyValueObservingOptionNew 
               context:nil];
Run Code Online (Sandbox Code Playgroud)

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

Bra*_*son 126

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

如果你-release之前压倒一切,你就是做错事.

  • @ElisevanLooij - 他们试图制作的关于手动内存管理案例.因为在该方法中最后不调用`[super dealloc]`几乎总是一个手动内存管理的错误,编译器现在为你处理它,这就是你不能再直接调用`-dealloc`的原因了.你在ARC下的`-dealloc`方法中放置的唯一东西是你需要释放的任何非对象资源,或者清除删除观察者等任务.他们使用的措辞有点混乱,但这就是他们的意思. (17认同)
  • @BjörnMilcke - 当我评论Elise的回答时,`-finalize`用于垃圾收集,其中`-dealloc`永远不会被调用,但将这些代码放在ARC下的`-dealloc`中是完全可以接受的.`[super dealloc]`会自动为你调用,这就是为什么在ARC下调用它是错误的. (7认同)