1.iOS底層-KVC使用實(shí)踐以及實(shí)現(xiàn)原理
賦值原理:
(1)去模型中查找有沒(méi)有setIcon方法,就直接調(diào)用這個(gè)set方法,給模型這個(gè)屬性賦值[self setIcon:dict[@"icon"]];
(2)如果找不到set方法,接著就會(huì)去尋找有沒(méi)有icon屬性,如果有,就直接訪問(wèn)模型中icon = dict[@"icon"];
(3)如果找不到icon屬性,接著又會(huì)去尋找_icon屬性,如果有,直接_icon = dict[@"icon"];
(4)如果都找不到就會(huì)報(bào)錯(cuò)
[<Flag 0x7fb74bc7a2c0> setValue:forUndefinedKey:]
2.KVC KVO 實(shí)現(xiàn)原理詳解
在運(yùn)行時(shí)會(huì)生成一個(gè)派生類,在這個(gè)派生類中重寫基類中任何被觀察屬性的 setter 方法,用來(lái)欺騙系統(tǒng)頂替原先的類。
3.kvo原理
KVO的是Key Value Observe的縮寫,中文是鍵值觀察。這是一個(gè)典型的觀察者模式,觀察者在鍵值改變時(shí)會(huì)得到通知。iOS中有個(gè)Notification的機(jī)制,也可以獲得通知,但這個(gè)機(jī)制需要有個(gè)Center,相比之下KVO更加簡(jiǎn)潔而直接。
KVO的使用也很簡(jiǎn)單,就是簡(jiǎn)單的3步。
1.注冊(cè)需要觀察的對(duì)象的屬性addObserver:forKeyPath:options:context:
2.實(shí)現(xiàn)observeValueForKeyPath:ofObject:change:context:方法,這個(gè)方法當(dāng)觀察的屬性變化時(shí)會(huì)自動(dòng)調(diào)用
3.取消注冊(cè)觀察removeObserver:forKeyPath:context:
在運(yùn)行時(shí)會(huì)生成一個(gè)派生類,在這個(gè)派生類中重寫基類中任何被觀察屬性的 setter 方法,用來(lái)欺騙系統(tǒng)頂替原先的類。
所以使用setter方法修改屬性值才能被觀察到。