2011-06-09 15 views
1

我最近開始使用NSNotification S:架空NSNotifications

[[NSNotificationCenter defaultCenter] postNotificationName: selector: object:]; .... 

我覺得這是對視圖控制器之間通信的真棒概念。對於應用中的所有通信,使用NSNotification幾乎看起來有點過於簡單。

在我使用NSNotification S表示大部分工作在我的應用程序時,你認爲什麼將是太多的開銷?

回答

1

我似乎記得讀到NSNotification相當耗費開銷,所以使用它們中的很多可能不是最好的主意。相反,我會考慮採用delegate協議。您可以輕鬆創建自己的文件,告訴您的文件要做什麼和什麼時候做。

This site給出了一個與我用來學習如何創建委託的例子非常相似的例子,可能值得研究。我以前一直使用NSNotifications,直到我瞭解代表,並將所有通知切換到代表方法,而不是

+0

代表非常好,但他們不是替代通知。如果應用程序不發送每個運行循環30+以上,則開銷將不明顯。 – JustSid 2011-06-09 16:35:31

+0

非常真實的,你必須使用大量的'postNotification'調用來真正注意到任何區別。我想我只是有點偏向代表而不是通知 – justin 2011-06-09 16:48:32

+0

這真是太棒了。感謝LINK! – Legolas 2011-06-09 16:54:50

7

您需要記住的有關NSNotification的一件事是它們是阻止機制。因此,發佈通知的對象不需要知道誰在接收它,如果接收者太多,則必須在postNotification呼叫可以返回之前處理所有這些接收者。這是你必須考慮的事情。

正如@slev所說,代表是一種更好的方法。僅當您不能使用委託方式時才使用通知。

+0

..謝謝! – Legolas 2011-06-09 16:55:06

+0

Deepak - 任何聊天機會? – Legolas 2011-06-09 17:11:10

+0

這是NSNotifications的主要風險。假設你正在通知一個網絡請求已經完成的鄰居對象,並將它關閉以處理該請求。 NSNotification發生在主線程上,除非你做了一些事情,被調用的函數也會在主線程上工作。如果這是一個長時間運行的過程,那麼會阻止UI(事物不會滾動或動畫化,它會看起來是凍結的),直到完成該過程。更糟糕的是,如果你有一堆觀察者打電話,那麼UI會阻塞,直到他們全部完成。 – 2011-06-09 18:09:34