簡體   English   中英

NSNotification如何運作

[英]How NSNotification works

我理解通知,海報和觀察者的內容。

但我完全無法理解我們的應用程序或操作系統如何理解並將標志/通知發送給觀察者類?

這背后的機制是什么?

您的回答和幫助將受到很多贊賞。

謝謝

ID。

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

此外,在迭代期間,檢查以確定觀察者是否感興趣通知對象(基於添加觀察者時提供的參數)。

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

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

基本上,NotificationCenter會保留對注冊為觀察者的任何對象的引用。 通過該引用,它還可以跟蹤對象想要的通知類型。 當對象發布通知時,中心通過向觀察者發送帶有該選擇器的消息將其傳遞給每個注冊的觀察者。

默認中心通常是全局單例。 但您可以創建自己的,也許您希望確保您的通知對您的應用是私有的。

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

[[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方法中取消觀察者。

加上你的理解,這花了一些時間讓我消化到我的頭腦中。 雖然它沒有告訴它內部如何工作,但它告訴它如何實現工作

在多線程應用程序中,通知始終在發布通知的線程中傳遞, 這可能與觀察者注冊自己的線程不同。

來源: 蘋果文檔

因此,通知可以在任何線程中注冊,但與通知關聯的方法在發布通知的線程上運行,因此如果我們要對UI進行任何更改,我們會將其分派給主線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM