KVO與通知的區別

2021-07-10 09:47:07 字數 1080 閱讀 9354

kvo提供一種機制,當指定的被觀察的對像的屬性被修改後,kvo會自動通知響應的觀察者,kvc(鍵值編碼)是kvo的基礎

通知:是一種廣播機制,在實踐發生的時候,通過通知中心物件,乙個物件能夠為所有關心這個時間發生的物件傳送訊息,兩者都是觀察者模式,不同在於kvo是被觀察者直接傳送訊息給觀察者,是物件間的直接互動,通知則是兩者都和通知中心物件互動,物件之間不知道彼此

kvo使用:被觀察著發生addobserver:forkeypath:options:context:方法來新增觀察者.然後只要被觀察者的keypath值發生變化(注意單純改變值不會呼叫此方法,只有通過getter和sett來改變值才會觸發kvo),就會在觀察者裡呼叫方法observervalueforkeypath:ofobject:change:context:因此實現此方法來對kvo發出的通知做出響應.

這些**都是秩序在觀察者裡進行實現,被觀察者不用新增任何**,所以誰要監聽誰要註冊,然後對響應進行處理即可,使得觀察者與被觀察者完全解耦,運用很靈活很簡便,但是kvo只能檢測類中屬性,並且屬性名都是通過nsstring來查詢,編譯器不會幫你檢測對錯和補全,純手敲會比較容易出錯

通知的使用:通知的發出是由通知中心來統一發出,而不同通知通過唯一標示名notifcationname來區分,標示名由傳送通知的類來起.首先被觀察者自己在必要的方法a裡,通過方法postnotificationname:object:發出通知notificationname這樣傳送通知著這邊的工作就完成了,每次a被呼叫,就會傳送一次通知notificationname

然後誰要監聽a的變化,就通過[nsnotificationcenter defaultcenter] 的方法addobserver:sslector:name:object為觀察者註冊監聽name為notificationnmae的通知.

每次發出name為notificationnmae的通知時,註冊監聽後的觀察著就會呼叫其自己定義的方法notificationselector來進行相應

nsnotification的特點,就是需要被觀察者先主動發出通知,然後觀察者註冊監聽後,再來進行響應,比kvo多了傳送通知的一步,但是其優點是監聽不侷限屬性的變化,還可以對多種多樣的狀態變化進行監聽,監聽範圍廣,使用靈活.

通知協議KVO的用法

當我們第一次編寫ios應用時,我們注意到不斷的在使用 delegate 並且貫穿於整個sdk。delegation模式不是ios特有的模式,而是依賴與你過去擁有的程式設計背景。針對它的優勢以及為什麼經常使用到,這種模式可能不是很明顯的。delegation的基本特徵是,乙個controller定義了...

通知機制和KVO機制

在cocoa touch框架中,觀察者模式的具體應用有兩個,即通知機制和kvo key value observing 模式機制。通知機制 通知機制與委託機制不同的是,通知是一對多的物件之間的通訊,而委託則是一對一物件之間的通訊。歸納一下通知主要有廣播通知 broadcast notificatio...

kvc和kvo的區別

on 2012 年 6 月 7 日,in iphone,by donly kvc 與 kvo 是 objective c 的關鍵概念,個人認為必須理解的東西,下面是例項講解。乙個物件擁有某些屬性。比如說,乙個 person 物件有乙個 name 和乙個 address 屬性。以 kvc 說法,per...