释放通知的两种方法
1.
[[NSNotificationCenter defaultCenter] removeObserver:self name:name object:nil];
2.
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
先说第一种,苹果官方文档中的代码是在viewWillAppear的时候添加,viewWillDisappear的时候remove。当苹果在iOS7中增加了导航控制器侧滑返回功能(如果没有这个效果,可以看看是否重写了导航栏自带的返回键,而且没有开启这个功能),viewWillAppear:、viewWillDisappear:、viewDidAppear:、viewDidDisappear:方法调用变得更方便.但是,当侧滑的时候就会调用viewWillDisappear后又取消侧滑返回,会在这是remove通知,再继续操作会使通知失效.
再说第二种,使用dealloc方法,是在控制器销毁之时调用的。会释放控制器里所有的通知,但是,有时候dealloc却没有执行,比如:1.在使用NSTimer的时候;2.在block里面没有弱引用而造成的循环引用.
所以在使用dealloc的时候,建议打印一下,看看是否执行了.