是否需要ARC中的NSNotificationCenter removeObserver?

Tud*_*dor 42 iphone cocoa-touch objective-c ios automatic-ref-counting

添加观察者是否会增加对象的保留计数?如果是,ARC是否也会处理此观察者的移除?如果没有,我应该在哪里删除观察者?

nsg*_*ver 79

即使您使用,也应该明确删除观察者ARC.创建一个dealloc方法并删除那里..

-(void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
Run Code Online (Sandbox Code Playgroud)

如果您看到[super dealloc];此处不需要调用的方法,则只需要不需要super dealloc的方法.

Swift的更新

如果要在swift中编写代码,可以使用deinit方法删除observer .

deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self)
       }
Run Code Online (Sandbox Code Playgroud)

  • 因为iOS9这个答案已经过时,不再需要在dealloc中注销,REF:http://useyourloaf.com/blog/unregistering-nsnotificationcenter-observers-in-ios-9/ (16认同)
  • 通知中心不会持有观察员的强烈参考,因此没有必要在"ARC"中明确删除它们. (3认同)