kvc,全稱:key-value-coding。
kvc運用了isa-swizzling技術。isa-swizzling就是型別混合指標機制。kvc主要通過isa-swizzling來實現其內部定位查詢。isa指標(is a kind of),指向維護分發表的物件的類。該分發表實際上包含了指向實現類中的指標和其他資料。
比如:8
[dic setvaule:@"zhangsan
" forkey:@"
name
"];
當執行的時候就會被編譯成:
sel sel = sel_get_uid("setvalue:forkey:");
imp method = objc_msg_lookup(dic->isa,sel);
method(dic,sel,
@"zhangsan
",@"
name
");
其中,sel_get_uid函式是通過方法名得到乙個方法選擇器。
objc_msg_lookup:如果我們想用oc執行函式得到乙個imp,就可以使用objc_msg_lookup函式 。
這樣kvc內部實現就可以這樣描述了:
乙個物件在呼叫setvalue的時候,
1、根據方法名找到執行方法的時候所需要的環境引數。
2、他會從自己isa指標結合環境引數,找到具體的方法實現介面。
3、再直接查詢得到的具體的方法實現。
KVC實現原理簡介
kvc,全稱 key value coding。kvc運用了isa swizzling技術。isa swizzling就是型別混合指標機制。kvc主要通過isa swizzling來實現其內部定位查詢。isa指標 is a kind of 指向維護分發表的物件的類。該分發表實際上包含了指向實現類中的...
KVC相關簡介
kvc key value coding 根據字串的名稱去設定或者獲取類的屬性的機制 person zhangsan person alloc init 通過set方法設定張三的名稱 zhangsan setname zhangsan 通過get方法獲取張三的名稱 nsstring name zha...
KVC和KVO底層原理
kvc和kvo想必都熟知的乙個名詞,觀察者模式,而kvo是基於kvc的,那麼kvc到底是個什麼,kvo又是什麼,那麼它們之間是怎麼關聯的。當你了解kvc機制,會恍然大悟,只要知道乙個ui的結構,就能對他做任意的修改。而kvo是觀察者模式的一種實現,對物件屬性監聽能達到乙個高效能處理,所以了解kvc和...