2014-04-21 22 views
0

我使用本教程開始:
http://www.raywenderlich.com/63269/how-to-save-your-game-data-tutorial-part-2-of-2我應該刪除通知NSUbiquitousKeyValueStoreDidChangeExternallyNotification

我不得不使用它,它實施和測試,一切工作正常。

在這裏我發現,通知只應在dealloc中被刪除(在文章的末尾)
http://subjective-objective-c.blogspot.com/2011/04/avoid-nsnotification-removeobserver.html

我的問題是我應該刪除通知NSUbiquitousKeyValueStoreDidChangeExternallyNotification? 並用什麼方法?

回答

1

通常,對於任何通知,當您不再關心通知時,請停止觀察。你不關心的一種情況是當觀察通知的對象被取消分配時。

第二篇文章告訴你的是,removeObserver:通常不是最佳選擇。它從通知中刪除觀察者的所有通知。這包括您註冊的通知以及框架在內部使用的通知。正如文章解釋的那樣,最好使用removeObserver:name:object:明確註銷每個通知。它不會告訴你,你應該只註銷dealloc中的通知,它告訴你,你應該僅在dealloc中使用removeObserver:方法註銷通知。這是很好的建議,但可以在需要的地方使用其他remove-observer方法。

這通常意味着您想要註銷dealloc,但這取決於您的代碼的功能以及何時需要接收通知。

+0

我的困惑是這樣的。如果我需要在dealloc中刪除它,根據我的「業務邏輯」,爲什麼我應該這樣做?因爲dealloc之後不再有我的對象,所以通知無法到達它,所以爲什麼要首先解決它呢?請你能爲我澄清這一點嗎? – WebOrCode

+0

這是因爲你想告訴'NSNotificationCenter'它不應該嘗試發送通知給對象了。你想這樣做,因爲你不想讓你的應用程序崩潰。 'NSNotificationCenter'可能足夠聰明以解決這個問題,但如果你想要穩定的代碼,你應該確保。 –

+0

好的,現在我明白了。 – WebOrCode