我最近開始使用NSNotification
S:架空NSNotifications
[[NSNotificationCenter defaultCenter] postNotificationName: selector: object:]; ....
我覺得這是對視圖控制器之間通信的真棒概念。對於應用中的所有通信,使用NSNotification
幾乎看起來有點過於簡單。
在我使用NSNotification
S表示大部分工作在我的應用程序時,你認爲什麼將是太多的開銷?
我最近開始使用NSNotification
S:架空NSNotifications
[[NSNotificationCenter defaultCenter] postNotificationName: selector: object:]; ....
我覺得這是對視圖控制器之間通信的真棒概念。對於應用中的所有通信,使用NSNotification
幾乎看起來有點過於簡單。
在我使用NSNotification
S表示大部分工作在我的應用程序時,你認爲什麼將是太多的開銷?
我似乎記得讀到NSNotification相當耗費開銷,所以使用它們中的很多可能不是最好的主意。相反,我會考慮採用delegate
協議。您可以輕鬆創建自己的文件,告訴您的文件要做什麼和什麼時候做。
This site給出了一個與我用來學習如何創建委託的例子非常相似的例子,可能值得研究。我以前一直使用NSNotifications,直到我瞭解代表,並將所有通知切換到代表方法,而不是
您需要記住的有關NSNotification
的一件事是它們是阻止機制。因此,發佈通知的對象不需要知道誰在接收它,如果接收者太多,則必須在postNotification
呼叫可以返回之前處理所有這些接收者。這是你必須考慮的事情。
正如@slev所說,代表是一種更好的方法。僅當您不能使用委託方式時才使用通知。
..謝謝! – Legolas 2011-06-09 16:55:06
Deepak - 任何聊天機會? – Legolas 2011-06-09 17:11:10
這是NSNotifications的主要風險。假設你正在通知一個網絡請求已經完成的鄰居對象,並將它關閉以處理該請求。 NSNotification發生在主線程上,除非你做了一些事情,被調用的函數也會在主線程上工作。如果這是一個長時間運行的過程,那麼會阻止UI(事物不會滾動或動畫化,它會看起來是凍結的),直到完成該過程。更糟糕的是,如果你有一堆觀察者打電話,那麼UI會阻塞,直到他們全部完成。 – 2011-06-09 18:09:34
代表非常好,但他們不是替代通知。如果應用程序不發送每個運行循環30+以上,則開銷將不明顯。 – JustSid 2011-06-09 16:35:31
非常真實的,你必須使用大量的'postNotification'調用來真正注意到任何區別。我想我只是有點偏向代表而不是通知 – justin 2011-06-09 16:48:32
這真是太棒了。感謝LINK! – Legolas 2011-06-09 16:54:50