我通常像下面的示例一样使用 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子类使用通知?