2010-09-26 39 views
15

在一個代碼中的一些點,可以加入像iPhone - 測試是否通知存在

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

我如何測試,如果該通知已經活躍在隊列或已被刪除,以防止添加重複?

謝謝。

+0

的可能的複製[如何避免添加多個NSNotification觀察?](http://stackoverflow.com/questions/5658426/how-to-avoid-adding-multiple-nsnotification-observer) – 2016-01-04 12:59:07

回答

25

如果您的意思是「測試您是否已經註冊爲通知的觀察者」,我不認爲除了發佈通知並看到您獲得回調(可能會造成災難性影響)之外, 。

如果存在雙重添加的危險,我通常在添加之前使用[[NSNotificationCenter defaultCenter] removeObserver:self name:foo object:bar]

註冊通知不會發生在隊列中。之前將它添加

+4

沒有知道的情況下移除觀察者是沒有危險的g是否有觀察員要移除?是不是像發佈一個已經發布的對象?會不會導致應用程序崩潰? – SpaceDog 2010-09-27 01:31:05

+0

@Digital Robot;我一直這樣做。它不會崩潰。 – 2010-09-27 20:41:28

+4

1.它不像雙釋放/雙免費,因爲NSNotificationCenter不保留「目標」或「對象」(大概它保留「名稱」)。 2. NSNotificationCenter記錄(目標,選擇器,名稱,對象)元組。它*必須*,因爲它在調用removeObserver:或removeObserver:name:object:時必須知道要刪除的內容。 3.「刪除」方法通常意味着「如果沒有添加任何東西(例如' - [NSMutableSet removeObjectForKey:]',' - [NSArray removeObject:]') – 2010-09-28 19:52:03