手動實現(xiàn)KVO解析
PS:原鏈接沒找到,侵立刪~
實現(xiàn)原理:
假設被觀察者為A類的實例L,實現(xiàn)流程如下:
1.在運行時岩瘦,為A類創(chuàng)建一個子類B。
2.強行將實例L的類型改為B棉钧。
3.為B類添加新的setter方法。
4.為B類添加觀察者列表屬性M枕扫。
5.將觀察者的信息封裝為類放入B類的M三妈。
重點在第三項——kvo的setter方法如何寫:
因為是將實例L的類更改為了原類A的子類B畜埋,需要調(diào)用父類的對應的setter方法。
由于在整個KVO過程中畴蒲,觀察的屬性不一致則setter方法的名字也不一致由捎。無法直接運用super調(diào)用,最簡單的方法就是通過runtime來實現(xiàn)饿凛。
1. 獲得setter方法名
2. 根據(jù)setter方法名獲得對應的setter消息
3. 根據(jù)setter方法名獲得getter方法名
4. 根據(jù)getter方法名獲得被觀察屬性當前值
5. 創(chuàng)建消息傳遞結(jié)構(gòu)體(為了把setter消息轉(zhuǎn)發(fā)給父類)
6. 把setter消息轉(zhuǎn)發(fā)給父類
7. 遍歷觀察者列表狞玛,得到觀察者信息,執(zhí)行操作