一般問起來kvo 不知道怎么回答 不就是 一個觀察者機(jī)制O街凇!:途础0颊ā!昼弟!
有什么好問的;够荨!K蕉拧!
好 現(xiàn)在來整理下 kvo的實(shí)現(xiàn)原理
kvo
k- key
v-value
o-observer
kvo遵循了NSKeyValueCoding救欧,是oc對觀察者模式的一種實(shí)現(xiàn)
實(shí)現(xiàn)原理
swift是一個靜態(tài)語言衰粹,沒有runtime機(jī)制,所以Swift里面想要用runtime 必須繼承NSObject
比如說 a 對象被觀察 這時候kvo就利用runtime 創(chuàng)建一個notic_a 的類 并且把當(dāng)前的isa指針執(zhí)行這個類 這個新類是原來類的子類 還會將原類的實(shí)例方法重寫
并且 kvo為NSKVONotifion_a重寫setter方法笆怠,在重寫的setter方法中 修改值之前會調(diào)用willchangeValue 修改之后會調(diào)用didChangeValueForKey最后共這兩個方法 將在observalueForKeyPath中被調(diào)用
kvo缺點(diǎn)
重復(fù)的add和remove導(dǎo)致crash
observer被釋放導(dǎo)致崩潰
keyPath傳錯導(dǎo)致崩潰