今天在一個控制器里面寫一個通知接收函數(shù)
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(action:) name:@"ntfName" object:nil];```
但是寫在了`ViewDidLoad`里面了,一般情況下這是沒有問題的,但是如果你這個頁面會重復(fù)出現(xiàn)并成為`window`的`rootViewController`的話,那就問題大了。因為沒出現(xiàn)一次,這個通知就會注冊一次,最后造成的后果就是你的通知響應(yīng)函數(shù)會執(zhí)行n次,是不是非常蛋疼,網(wǎng)上有好多人說卸載`dealloc`里面,但是一般ARC的工程基本不會執(zhí)行這個函數(shù)。
所以解決辦法就是把上面的接收通知的函數(shù)寫在頁面出現(xiàn)的函數(shù)里
- (void)viewDidAppear:(BOOL)animated{
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(action:) name:@"ntfName" object:nil];
}```
之后在頁面消失的時候移除通知的觀察者
- (void)viewWillDisappear:(BOOL)animated{
[[NSNotificationCenter defaultCenter]removeObserver:self];
}```
一般情況下是遇不到這個坑的,但是如果發(fā)現(xiàn)你的通知響應(yīng)函數(shù)重復(fù)執(zhí)行,那么這個解決辦法可能會幫到你。