iOS KVC和KVO

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)聽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容