在需要監(jiān)聽某件事情或者傳值我們可能會想到通知這種模式,但是在ARC環(huán)境下仍需要對監(jiān)聽者處理,不然會可能發(fā)生錯誤呼寸,notificationCenter (監(jiān)聽的創(chuàng)建是一種單例模式)艳汽,首先使用通知會有一個廣播post和一個觀察者addobserve,首先我們要在用到的地方注冊一個通知來接受傳遞的值:
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(registration:) name:@"registration" object:nil];
}
-(void)registration:(NSNotification *)noti{
NSDictionary *dic = noti.userInfo;
NSLog(@"dic:%@",dic);
}
如果我們是在viewDidLoad中注冊的通知等舔,一般會在
-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
移除這個通知骚灸,因為通知是很占內(nèi)存的,防止內(nèi)存泄漏而導(dǎo)致程序崩潰慌植。
這中移除是看在哪里添加的通知甚牲,只要在這個視圖view或者控制器viewController被釋放之前把這個通知移除就好了。
我就在移除通知的時候遇到過坑蝶柿,在視圖被釋放了丈钙,可是通知還在,導(dǎo)致了程序的崩潰交汤,而且最讓人頭疼的是雏赦,這種情況在控制臺可能不會被答應(yīng)出來!芙扎!在移除通知一定要懂得代碼執(zhí)行的順序星岗,進行操作。今天還遇到了一個坑戒洼,就是我們有一個測試版本和一個appstore版本俏橘,寫入的代碼每次都在測試版本上運行測試了,然而打了一個appstore的測試版本后一些文件沒有勾選appstore版本圈浇,那么可想而知缺少的文件是多么的讓人蛋疼寥掐。正確應(yīng)該是這樣的。
然而沒有勾選
那么就炸了磷蜀!一定要注意召耘!
明天寫一寫iOS10的本地推送。