KVC:鍵值編碼,一個非正式的協(xié)議,使用字符串訪問一個對象實(shí)例變量的機(jī)制。
一個對象在調(diào)用setvalue時,
1、首先根據(jù)方法名找到運(yùn)行方法的時候所需要的環(huán)境參數(shù)。
2、它會從isa指針結(jié)合環(huán)境參數(shù)找到具體方法實(shí)現(xiàn)的接口。
3、再直接查找得到的具體的方法。
KVO:鍵值監(jiān)聽,指定對象的屬性被修改,對象就會接受到通知。
使用KVO的前提是遵循 KVO 的屬性設(shè)置方式來變更屬性值。
使用步驟:
1、注冊觀察者,實(shí)施監(jiān)聽
2、回調(diào)方法中處理屬性變化
3、移除觀察者
原理:當(dāng)觀察對象A時,KVO機(jī)制動態(tài)創(chuàng)建A的子類,并為子類重寫了被觀察屬性keyPath的set方法,set方法負(fù)責(zé)通知被觀察對象屬性改變的狀況。
進(jìn)一步分析:
利用對象的isa指針指向該對象的類,對象注冊為觀察者時,isa指針指向新子類,這個被觀察的對象就變成新子類的對象,因而在該對象上對set方法調(diào)用就會調(diào)用已重寫的set方法,從而激活鍵值通知機(jī)制。
通知(notification)比KVO多了發(fā)送通知的一步,對象之間直接交互,notification明顯的多,KVO是由系統(tǒng)通知的。通知的優(yōu)點(diǎn)是監(jiān)聽不局限于屬性變化,可以對各種各樣的狀態(tài)進(jìn)行監(jiān)聽,監(jiān)聽范圍廣,例如鍵盤的彈起,前后臺等系統(tǒng)監(jiān)聽。