今天在一个控制器里面写一个通知接收函数
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(action:) name:@"ntfName" object:nil];```
但是写在了`ViewDidLoad`里面了,一般情况下这是没有问题的,但是如果你这个页面会重复出现并成为`window`的`rootViewController`的话,那就问题大了。因为没出现一次,这个通知就会注册一次,最后造成的后果就是你的通知响应函数会执行n次,是不是非常蛋疼,网上有好多人说卸载`dealloc`里面,但是一般ARC的工程基本不会执行这个函数。
所以解决办法就是把上面的接收通知的函数写在页面出现的函数里
- (void)viewDidAppear:(BOOL)animated{
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(action:) name:@"ntfName" object:nil];
}```
之后在页面消失的时候移除通知的观察者
- (void)viewWillDisappear:(BOOL)animated{
[[NSNotificationCenter defaultCenter]removeObserver:self];
}```
一般情况下是遇不到这个坑的,但是如果发现你的通知响应函数重复执行,那么这个解决办法可能会帮到你。