iOS-開啟arc之后 NSNotificationCenter removeObserver 是否需要調用


開啟ARC之后,NSNotificationCenter removeObserver 是否需要調用,在何時調用?

今天在stackoverflow上面看到一個問題,arc情況下是否需要調用removeObserver,自己想了想,的確是個問題,就研究了一下。

上代碼:

- (void)dealloc {
    [[NSNotificationCenter defaultCenter]   removeObserver:self];
}

本來想着在arc中dealloc方式是已經遺棄的了,但是事實是它還存在,但是不能像mrc中那樣還需要調用一下[super dealloc],在arc環境下,這個方法是不能用的,否則編譯器直接就報錯。 
后來我就想到dealloc方式會正常調用嗎?

下面是添加觀察者的方法:

[[NSNotificationCenter defaultCenter] addObserver:self
                                                     selector:@selector(method:)
                                                         name:@"postkey"
                                                       object:nil];

這個方法第一個參數Observer是不會對它進行retain操作,所以不會形成循環引用,但是還有必要調用removeObserver嗎?

答案當然是:有必要!

如果這個對象被釋放,當在調用post消息的時候,就會報對象被釋放的錯誤,導致閃退,所以在添加觀察者的對象,一定要在它被銷毀的時候從消息中心刪除!

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM