2013-03-27 24 views
42

添加觀察者是否會增加對象的保留計數? 如果是,ARC是否也會處理這個觀察者的移除?如果不是,我應該在哪裏刪除觀察者?是否需要ARC中的NSNotificationCenter removeObserver?

+0

請參閱[此問題](http://stackoverflow.com/q/13911651/730701)。 – Adam 2013-03-27 10:17:25

+0

這與我問幾個月回來的情況相同:) – 2013-04-03 06:01:02

+2

我認爲重新提出這些問題是有效的,因爲我更願意尋找最新的問題答案,以防感知的智慧發生變化。 – amergin 2013-11-27 12:03:14

回答

78

即使使用ARC,也應明確刪除觀察者。創建dealloc方法和刪除那裏..

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

如果你看到的方法,你不必在這裏呼籲[super dealloc];,只是沒需要超級的dealloc方法。

更新斯威夫特

你可以,如果你在迅速編寫代碼DEINIT方法去除觀測。

deinit { 
     NSNotificationCenter.defaultCenter().removeObserver(self) 
     } 
+0

一個問題:當你調用addObserver時,NSNotificationCenter是否保留觀察者?謝謝。 – Ricardo 2014-05-14 14:53:05

+0

它不被保留! – Pei 2014-06-25 03:10:11

+3

通知中心不會持有強烈的觀察者引用,所以沒有必要在'ARC'中明確地刪除它們。 – holex 2014-10-29 16:51:23

相關問題