我通常像下面的示例一样使用 NSNotification:
在 viewDidLoad 中:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(foo:) name:kName1 object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(bar:) name:kName2 object:nil];
在 viewDidUnload 和 dealloc 中:
[[NSNotificationCenter defaultCenter] removeObserver:self];
但一位朋友告诉我,我不应该使用[[NSNotificationCenter defaultCenter] removeObserver:self];
,因为它会删除所有观察者,包括超类的 . 他建议我使用下面的代码来一一移除观察者。
[[NSNotificationCenter defaultCenter] removeObserver:self name:kName1 object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:kName2 object:nil];
我检查了 ASIHttpRequest 库的代码 ( https://github.com/pokeb/asi-http-request )。它遵循我朋友的建议。
我想知道我的朋友是对还是错?在我看来,由于当前实例将被卸载或释放,超类的通知也是无用的。并且是否有任何系统 UIViewController 子类使用通知?