KVO提供一種機制,當指定的被觀察的對像的屬性被修改後,KVO會自動通知響應的觀察者,KVC(鍵值編碼)是KVO的基礎post
通知:是一種廣播機制,在實踐發生的時候,經過通知中心對象,一個對象可以爲全部關心這個時間發生的對象發送消息,二者都是觀察者模式,不一樣在於KVO是被觀察者直接發送消息給觀察者,是對象間的直接交互,通知則是二者都和通知中心對象交互,對象之間不知道彼此編碼
KVO使用:被觀察着發生addobserver:forkeyPath:options:context:方法來添加觀察者.而後只要被觀察者的keypath值發生變化(注意單純改變值不會調用此方法,只有經過getter和sett來改變值纔會觸發KVO),就會在觀察者裏調用方法observerValueForKeyPath:ofobject:change:context:所以實現此方法來對KVO發出的通知作出響應.server
這些代碼都是秩序在觀察者裏進行實現,被觀察者不用添加任何代碼,因此誰要監聽誰要註冊,而後對響應進行處理便可,使得觀察者與被觀察者徹底解耦,運用很靈活很簡便,可是KVO只能檢測類中屬性,而且屬性名都是經過NSString來查找,編譯器不會幫你檢測對錯和補全,純手敲會比較容易出錯對象
通知的使用:通知的發出是由通知中心來統一發出,而不一樣通知經過惟一標示名notifcationName來區分,標示名由發送通知的類來起.首先被觀察者本身在必要的方法A裏,經過方法postNotificationName:object:發出通知notificationName這樣發送通知着這邊的工做就完成了,每次A被調用,就會發送一次通知notificationNamessl
而後誰要監聽A的變化,就經過[NSNotificationCenter defaultCenter] 的方法addobserver:sslector:name:object爲觀察者註冊監聽name爲notificationNmae的通知.get
每次發出name爲notificationNmae的通知時,註冊監聽後的觀察着就會調用其本身定義的方法notificationselector來進行相應編譯器
NSNotification的特色,就是須要被觀察者先主動發出通知,而後觀察者註冊監聽後,再來進行響應,比KVO多了發送通知的一步,可是其優勢是監聽不侷限屬性的變化,還能夠對多種多樣的狀態變化進行監聽,監聽範圍廣,使用靈活.io