起初以为addObserverForName的释放问题和addObserver的释放是一样。测试结果是不同的。
先说下addObserver的一般处理步骤:
1.加入观察者
[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dealWithNote:) name:@"NoteName" object:nil];
2.实现响应
-(void)dealWithNote:(NSNotification *)note {
}
3.推送消息
[[NSNotificationCenter defaultCenter] postNotificationName:@"NoteName" object:nil];
4.释放资源
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"NoteName" object:nil];
而addObserverForName就有些不同了。
1.注册观察者,加入了queue和__block. 这样简化了代码。 例如:
_observer = [[NSNotificationCenter defaultCenter] addObserverForName:@"NoteName"
object:nil
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification *note) {
}];
4.释放资源
// 这里不能使用
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"NoteName" object:nil];
而使用一下方式
if(_observer){
[[NSNotificationCenter defaultCenter] removeObserver:_observer];
}