1.KVO實(shí)現(xiàn)的原理
KVO基于runtime實(shí)現(xiàn)的,其原理當(dāng)某個(gè)類(lèi)第一次被觀察時(shí),系統(tǒng)會(huì)在運(yùn)行期動(dòng)態(tài)的創(chuàng)建該類(lèi)的一個(gè)子類(lèi),在這個(gè)子類(lèi)中重寫(xiě)被觀察屬性的setter方法,子類(lèi)在重寫(xiě)的setter方法內(nèi)實(shí)現(xiàn)真正的通知機(jī)制(如果元類(lèi)為Person责语,那么子類(lèi)名為NSKVONotifying——Person),每個(gè)類(lèi)對(duì)象中都有一個(gè)isa指針指向當(dāng)前類(lèi)目派,當(dāng)一個(gè)類(lèi)對(duì)象第一次被觀察時(shí)坤候,系統(tǒng)會(huì)偷偷將isa指針指向動(dòng)態(tài)生成的子類(lèi),從而在被監(jiān)控屬性賦值的時(shí)候執(zhí)行的是子類(lèi)的setter方法
鍵值觀察通知依賴(lài)于NSObject的兩個(gè)方法企蹭,willChangeValueForKey铐拐,和didChangeValueForkey,observeValueForKey在兩個(gè)方法之間調(diào)用