在需要監聽某件事情或者傳值我們可能會想到通知這種模式,但是在ARC環境下仍需要對監聽者處理,不然會可能發生錯誤,notificationCenter (監聽的創建是一種單例模式),首先使用通知會有一個廣播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];
}
移除這個通知,因為通知是很占內存的,防止內存泄漏而導致程序崩潰。
這中移除是看在哪里添加的通知,只要在這個視圖view或者控制器viewController被釋放之前把這個通知移除就好了。
我就在移除通知的時候遇到過坑,在視圖被釋放了,可是通知還在,導致了程序的崩潰,而且最讓人頭疼的是,這種情況在控制臺可能不會被答應出來!!在移除通知一定要懂得代碼執行的順序,進行操作。今天還遇到了一個坑,就是我們有一個測試版本和一個appstore版本,寫入的代碼每次都在測試版本上運行測試了,然而打了一個appstore的測試版本后一些文件沒有勾選appstore版本,那么可想而知缺少的文件是多么的讓人蛋疼。正確應該是這樣的。
image.png
然而沒有勾選
image.png
那么就炸了!一定要注意!
明天寫一寫iOS10的本地推送。