刪除所有通知觀察者我想刪除的通知觀察者和我使用的方法:從一個地方
removeObserver: name:@"myNotification" object:nil
這一點。現在有很多觀察者正在收聽這個通知,我想從集中的地方一次性刪除所有這些通知。我可以在第一個參數中傳遞'nil',它會刪除所有正在監聽myNotification的觀察者嗎?
刪除所有通知觀察者我想刪除的通知觀察者和我使用的方法:從一個地方
removeObserver: name:@"myNotification" object:nil
這一點。現在有很多觀察者正在收聽這個通知,我想從集中的地方一次性刪除所有這些通知。我可以在第一個參數中傳遞'nil',它會刪除所有正在監聽myNotification的觀察者嗎?
您可以一起從通知中心刪除一個對象,這意味着不會觸發通知。例如,當我有一個已經註冊通知的視圖控制器時,我將這行包含在我的dealloc中。
[[NSNotificationCenter defaultCenter] removeObserver:self];
這是在對象級別...所以它會取消註冊許多通知。它不會註銷許多對象中的一個通知。
希望我正確理解你的問題。
不幸的是,沒有辦法在一個地方刪除特定通知的所有觀察者。雖然肯定會有這樣的情況,但這樣做通常很危險,做觀察的對象應該負責添加和刪除自己作爲特定通知的觀察者。這確保了B/C觀察員不會出現不可預知的行爲,從而可以自行配置和清理。
如果生成通知的對象消失,則觀察者無關緊要,因爲觀察者無論如何都不知道該對象。這只是意味着對象不會再生成任何通知。
[編輯:針對你的意見RE CLASS B STOPPING CLASS A通過觀察]
我剛纔看到你的評論。有不同的方法來實現這一點,特別是如果B類知道A類的時候。當你引用類時,聽起來像你想影響一個類的所有實例與特定實例。如果你有一些條件,你可以在處理通知時檢查,這就是我將如何處理這個問題。在通知處理程序是這樣的:
if ([self shouldRespondToNotificationNamed:notification.name]) {
[self performNotificationAction];
}
如果你沒有,你可以檢查一個條件,然後創建一個無論是在有關類別的伊娃,或者在可以全局訪問所有的地方類實例。我通常使用單例來存儲不會持久的全局應用程序狀態。如果它仍然存在,那麼可以使用你在其他國家使用的任何方法。
在斯威夫特的情況下,你在做這樣的:
NSNotificationCenter.defaultCenter().removeObserver(self)
而且在斯威夫特3:
NotificationCenter.default.removeObserver(self)
你試過了嗎? – 2011-04-12 03:42:31