NSNotification、delegate和KVO的區別

來源:互聯網
上載者:User

標籤:

1.效率肯定是delegate比nsnotification高。

2. delegate方法比notification更加直接,最典型的特徵是, KVO和NSNotification的區別:

和delegate一樣,KVO和NSNotification的作用也是類與類之間的通訊,與delegate不同的是1)這兩個都是負責發出通知,剩下的事情就不管了,所以沒有傳回值;2)delegate只是一對一,而這兩個可以一對多。這兩者也有各自的特點。

1)KVO的使用:

被觀察者發出  addObserver:forKeyPath:options:context:  方法來添加觀察者。

然後只要被觀察者的keyPath值變化(注意:單純改變其值不會調用此方法,只有通過getters和setters來改變值才會觸發KVO),就會在觀察者裡調用方法observeValueForKeyPath:ofObject:change:context:

因此觀察者需要實現方法 observeValueForKeyPath:ofObject:change:context: 來對KVO發出的通知做出響應。

這 些代碼都只需在觀察者裡進行實現,被觀察者不用添加任何代碼,所以誰要監聽誰註冊,然後對響應進行處理即可,使得觀察者與被觀察者完全解耦,運用很靈活很 簡便;但是KVO只能檢測類中的屬性,並且屬性名稱都是通過NSString來尋找,編譯器不會幫你檢錯和補全,純手敲所以比較容易出錯。
2)NSNotification的使用
這裡的通知不是由被觀察者發出,而是由NSNotificationCenter來統一發出,而不同通知通過唯一的通知標識名notificationName來區分,標識名由發送通知的類來起。
首先被觀察者自己在必要的方法A裡,通過方法 postNotificationName:object:來發出通知notificationName這樣發送通知者這邊的工作就完成了,每次A被調用,就會發送一次通知notificationName。
然後誰要監聽A的變化,就通過 [NSNotificationCenter defaultCenter]的方法 addObserver:selector:name:object:為觀察者註冊監聽name為notificationName的通知然後每次發出name為notificationName的通知時,註冊監聽後的觀察者就會調用其自己定義的方法notificationSelector來進行響應。
NSNotification的特點呢,就是需要被觀察者先主動發出通知,然後觀察者註冊監聽後再來進行響應,比KVO多了發送通知的一步,但是其優點是監聽不局限於屬性的變化,還可以對多種多樣的狀態變化進行監聽,監聽範圍廣,使用也更靈活。

(轉)NSNotification、delegate和KVO的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.