iOS學習筆記(6)鍵值編碼 KVC

2022-08-13 23:24:18 字數 1148 閱讀 6939

在kvc程式設計方式中,無論呼叫setvalue:forkey:方法,還是呼叫valueforkey:方法,都是通過nsstring物件來指定被操作屬性,其中forkey:標籤使用者傳入屬性名的。

對於setvalue:屬性值forkey@「name」;**,底層的執行機制如下。

(1)程式優先考慮呼叫「setname:屬性值;」**通過setter方法完成設定。

(2)如果該類沒有setname:方法,kvc機制會搜尋該類名為_name的成員變數,無論該成員變數是在類介面部分定義,還是在類實現部分定義,也無論用哪個訪問控制符修飾,這條kvc**頂層實際上就是對_name成員變數賦值。

(3)如果該類既沒有setname:方法,也沒有定義_name成員變數,kvc機制會搜尋該類名為name的成員變數,無論該成員變數是在類介面部分定義,還是在類實現部分定義,也無論用哪個訪問控制符修飾,這條kvc**頂層實際上就是對name成員變數賦值。

(4)如果上面3條都沒有找到,系統將會執行該物件的setvalue:forundefinedkey:方法。

對於valueforkey:@name;**,底層的執行機制如下。

(1)程式優先考慮呼叫「name;」**來獲取該getter方法的返回值。

(2)如果該類沒有name方法,kvc機制會搜尋該類名為_name的成員變數,無論該成員變數是在類介面部分定義,還是在類實現部分定義,也無論用哪個訪問控制符修飾,這條kvc**頂層實際上就是返回_name成員變數的值。

(3)如果該類既沒有name方法,也沒有定義_name成員變數,kvc機制會搜尋該類名為name的成員變數,無論該成員變數是在類介面部分定義,還是在類實現部分定義,也無論用哪個訪問控制符修飾,這條kvc**頂層實際上就是返回name成員變數的值。

(4)如果上面3條都沒有找到,系統將會執行該物件的valueforundefinedkey:方法。

(1)預設的setvalue:forundefinedkey:方法和valueforundefinedkey:方法實現就是引發乙個異常,這個異常將會導致程式因為異常結束。如果不想因為不存在key而結束程式,可以重寫這兩個方法。

(2)當程式嘗試為某個屬性設定nil值時,如果該屬性並不接受nil值,那麼程式將會自動執行該物件的setnilvalueforkey:方法。如果為了自行制定這個行為,可以通過重寫setnilvalueforkey:方法實現。

鍵值編碼KVC

許多程式設計技術都基於間接機制,包括整個物件導向程式設計領域。本章將介紹另一種間接機制,這種機制不屬於obj c語言的特性,而是cocoa提供的一種特性。我們知道在c 中可以通過反射讀寫乙個物件的屬性,有時候這種方式特別方便,因為你可以利用字串的方式去動態控制乙個物件。其實由於objc的語言特性,你...

鍵值編碼 KVC 簡單的KVC

main.m kvc一 created by goddog on 15 1 3.1.我們可以通過setter和getter方法來設定和修改物件的屬性,同時也可以通過鍵值編碼 kvc 來操作物件屬性。2.何為kvc 以字串的形式間接的操作物件的屬性。設定值用 setvalue 屬性值 forkey 屬...

Objective C之KVC 鍵值編碼

ios中key value coding kvc 俗稱鍵值編碼,是乙個非正式的協議,它提供一種機制來間接訪問物件的屬性。直接訪問物件是通過呼叫訪問器的方法實現,而kvc不需要呼叫訪問器的設定和獲取方法,可以直接訪問物件的屬性。kvc的操作方法由nskeyvaluecoding協議提供,而nsobje...