深入理解 KVC KVO 實現機制 KVC

2021-09-07 06:58:38 字數 862 閱讀 2688

深入理解 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的名稱就是查表時所用的鍵。

sel資料型別:查詢方法表時所用的鍵。定義成char*,實質上可以理解成int值。

imp資料型別:他其實就是乙個編譯器內部實現時候的函式指標。當objective-c編譯器去處理實現乙個方法的時候,就會指向乙個imp物件,這個物件是c語言表述的型別。

kvc的內部機制:

乙個物件在呼叫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方法...