深入理解 kvc\kvo 實現機制 — kvc
kvc和kvo都屬於鍵值程式設計而且底層實現機制都是isa-swizzing,所以本來想放在一起講的。但是篇幅有限所以就分成了兩篇博文kvo實現機制傳送門
kvc概述
kvc使用
kvc鍵值查詢
搜尋單值成員
kvc實現分析
kvc運用了isa-swizzing技術。isa-swizzing就是型別混合指標機制。kvc通過isa-swizzing實現其內部查詢定位。isa指標(is kind of 的意思)指向維護分發表的物件的類,該分發表實際上包含了指向實現類中的方法的指標和其他資料。
比如說如下的一行kvc**:
[site setvalue:@"sitename" forkey:@"name"]; //會被編譯器處理成 sel sel = sel_get_uid(setvalue:forkey); imp method = objc_msg_loopup(site->isa,sel); method(site,sel,@"sitename",@"name");
每個類都有一張方法表,是乙個hash表,值是還書指標imp,sel的名稱就是查表時所用的鍵。kvc的內部機制:sel資料型別:查詢方法表時所用的鍵。定義成char*,實質上可以理解成int值。
imp資料型別:他其實就是乙個編譯器內部實現時候的函式指標。當objective-c編譯器去處理實現乙個方法的時候,就會指向乙個imp物件,這個物件是c語言表述的型別。
乙個物件在呼叫setvalue的時候進行了如下操作:
深入理解 KVC KVO 實現機制 KVC
kvc和kvo都屬於鍵值程式設計而且底層實現機制都是isa swizzing,所以本來想放在一起講的。但是篇幅有限所以就分成了兩篇博文 kvo實現機制傳送門 kvc概述 kvc使用 kvc鍵值查詢 搜尋單值成員 kvc實現分析 kvc運用了isa swizzing技術。isa swizzing就是型...
深入理解 KVC KVO 實現機制 KVO
kvc和kvo都屬於鍵值程式設計而且底層實現機制都是isa swizzing,所以本來想放在一起講的。但是篇幅有限所以就分成了兩篇博文。kvc實現機制傳送門 kvo概述 鍵值觀察key value observer就是觀察者模式。當需要檢測其他類的屬性值變化,但又不想被觀察的類知道,有點像fbi監視...
深入理解 KVC KVO 實現機制 KVC
kvc和kvo都屬於鍵值程式設計而且底層實現機制都是isa swizzing,所以本來想放在一起講的。但是篇幅有限所以就分成了兩篇博文 kvo實現機制傳送門 kvc概述 kvc使用 kvc鍵值查詢 搜尋單值成員1 首先搜尋setkey 方法。key指成員變數名,首字母大寫 2 上面的setter方法...