iOS開發之 NSNotificationCenter爲何add remove要成對出現

最近發現UMeng統計出現了一個崩潰統計報告,研究一會以後發現,原來是NSNotificationCenter出了問題,在viewDidLoad的時候添加了通知中心的監聽對象,可是在類的銷燬代碼卻沒有加上移除監聽對象的方法。終於找到Crash緣由了!server

修改代碼是一瞬間的事情,功夫全花在找出Bug的路上了。NSNotificationCenter爲何必定要加上移除監聽對象的方法呢?對象

好吧,在通知中心所在類被暫時幹掉的時候,通知中心並無自動移除,別忘了,在內存緊張的時候,系統是會把前面暫時沒有用到部分在內存的類先移除掉的,這個時候,若是很不幸的,若是你的那個NSNotificationCenter所在類被幹掉了。可是在後面的代碼中,你又發出了通知,接下來收到通知後,NSNotificationCenter調用收到對應通知的處理方法的時候,該方法已經不存在了,沒錯,你中獎了,程序直接crash掉。這就是爲何addObserver的時候在delloc的類要成對出現一個removeObserver的緣由。內存

相關文章
相關標籤/搜索