深入理解 KVC KVO 實現機制 KVC

2022-08-19 01:39:13 字數 841 閱讀 6822

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 實現機制 KVC

深入理解 kvc kvo 實現機制 kvc kvc和kvo都屬於鍵值程式設計而且底層實現機制都是isa swizzing,所以本來想放在一起講的。但是篇幅有限所以就分成了兩篇博文kvo實現機制傳送門 kvc概述 kvc使用 kvc鍵值查詢 搜尋單值成員 kvc實現分析 kvc運用了isa swizz...

深入理解 KVC KVO 實現機制 KVO

kvc和kvo都屬於鍵值程式設計而且底層實現機制都是isa swizzing,所以本來想放在一起講的。但是篇幅有限所以就分成了兩篇博文。kvc實現機制傳送門 kvo概述 鍵值觀察key value observer就是觀察者模式。當需要檢測其他類的屬性值變化,但又不想被觀察的類知道,有點像fbi監視...