2013-06-30 49 views
4

我瞭解通知,海報和觀察者的內容。NSNotification的工作原理

但我很難理解我們的應用程序或操作系統是如何理解並將標誌/通知發送給觀察員級的?

這是什麼機制?

您的回答和幫助將不勝感激。

謝謝

ID。

回答

1

爲了發送通知,對象發送:

[[NSNotificationCenter defaultCenter] postNotificationName:@"notif_key" object:nil userInfo:userDict]; 

現在,聽「notif_key」命名的通知@每一個活着的對象都可以做一些動作。

你如何讓對象聽?

它需要運行:

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

和當第一對象將發送所述通知,觀察者對象將運行「doSomething的:」方法。

注:

  • 的UserDict是一個字典,你可以發送一些信息給那些觀察員。
  • 不要忘記取消dealloc方法中的觀察者。
5

想象通知中心是一個字典,其中包含觀察者列表(及其指定的操作方法)的通知名稱和值的鍵。發佈通知時,獲取並重復該通知名稱的觀察者列表。每個觀察者都使用通知信息調用其操作方法。

此外,在迭代過程中,還會檢查通知對象是否對觀察者感興趣(根據添加觀察者時提供的參數)。

通知過程在發佈通知的線程上執行。

不要考慮嘗試依賴任何與觀察者添加方式和時間相關的隱含順序。

+0

那麼,如果我發佈了一個有'n'個觀察者的通知,是否會導致內部循環迭代'n'次? – Gokul

+0

是的,它的確如此。它可能會迭代更多,你不知道... – Wain

4

基本上,NotificationCenter保留對已註冊爲觀察者的任何對象的引用。通過該參考,它還會跟蹤對象所需的通知類型。 當對象發佈通知時,中心通過向觀察者發送包含該選擇器的消息將其傳遞給每個註冊的觀察者。

默認中心通常是全球單身人士。但是你可以創建自己的,也許如果你想確保你的通知對你的應用程序是私人的。

+0

我們如何創建我們自己的通知? – Bhupesh

+1

通過子類化或不使用類工廠方法。 – uchuugaka

0

加上你的理解,這需要一些時間來消化我的頭腦。儘管它沒有說明它是如何在內部工作的,但它告訴我們如何實現它的工作

在多線程應用程序中,通知總是在發佈通知的線程中傳遞,可能不是相同的線程觀察員註冊自己。

來源:apple documentation

因此,通知可以在任何線程註冊,但與通知相關聯的方法在該通知公佈的線程上運行,所以如果我們想做出任何更改我們將UI分派給主線程。