KVC 與KVO 簡介 與 作用 用法

2021-08-16 23:14:28 字數 1948 閱讀 9092

一、kvc 

1.什麼是kvc

kvc (key-value-coding):鍵值編碼。

2.kvc的作用

(1)為物件賦值 (或者獲取值valueforkey:)

animus *anim = [animus new];

[anim setvalue:@"六六" forkey:@"name"];

為私有屬性賦值 ( 例 :改變uitextfield的placeholder 顏色 和 字型大小)

[self.t

extfield setvalue:[uicolor redcolor] forkey:

@"_placeholderlabel.textcolor"];[

self

.textfield setvalue:[uifont systemfontofsize:

13weight:uifontweightmedium] forkeypath:

@"_placeholderlabel.font"

];如果物件(animus)中的屬性是另乙個物件(cat)

[anim setvalue:@"小曹" forkeypath:@"cat.name"];

(2)使用setvaluesforkeyswithdictionary:將字典轉換成模型

//自定義字典 或 網路json資料中的字典

nsdictionary *dic = @;

//轉換

[anim setvaluesforkeyswithdictionary:dic];

特別提醒

:字典的key和模型的屬性一定要一一對應。否則程式會報錯(閃退)。比如anim裡沒有eat的屬性.系統報錯為:找不到對應的key

二、kvo

1.什麼是kvo

kvo 是鍵值觀察者(key-value-observing)。kvo提供了一種觀察者的機制,通過對某個物件的某個屬性新增觀察者,當該屬性改變,就會呼叫"observevalueforkeypath:"方法,為我們提供乙個「物件值改變了!」的時機進行一些操作。

2.kvo實現原理

當某個類的物件第一次被觀察時,系統在執行時會建立該類的派生類,改派生類中重寫了該物件的setter方法,並且在setter方法中實現了通知的機制。派生類重寫了class方法,以「欺騙」外部呼叫者他就是原先那個類。系統將這個類的isa指標指向新的派生類,因此改物件也就是新的派生類的物件了。因而改物件呼叫setter就會呼叫重寫的setter,從而啟用鍵值通知機制。此外派生類還重寫了delloc方法來釋放資源。

3.kvo的使用

(1)給物件的屬性新增觀察者  

name

" options: nskeyvalueobservingoptionnew|nskeyvalueobservingoptionold context:null];

注: options: nskeyvalueobservingoptionnew | nskeyvalueobservingoptionold 返回改變之後的值 和 未改變之前的值   context可以為空

(2)若該屬性發生改變,系統自動呼叫下面的方法:

-(void)observevalueforkeypath:(nsstring *)keypath ofobject:(id)object change:(nsdictionary*)change context:(void *)context

4.kvo的使用場景

kvo用於監聽物件屬性的改變。

(1)下拉重新整理、下拉載入監聽uiscrollview的contentoffsize;

(2)webview混排監聽contentsize;

(3)監聽模型屬性實時更新ui;

(4)監聽控制器frame改變,實現抽屜效果

5.區別

如果仔細看過我上面寫的內容那麼kvo和kvc的區別就出來了。

kvo 是用來觀察屬性變化的;

kvc 是用來獲取和改變屬性值的;

KVO與KVC鍵值監聽的機制

kvc 通過key 來檢測value的值 直接貼上 var peo stu peo.name cao kvc 通過key來訪問value var name peo.valueforkey name as nsstring peo.setvalue kai forkey name print peo....

iOS每日一題之KVO與KVC

kvc key value coding 即鍵值編碼 kvc是一種間接操作物件屬性的機制,可以給物件的屬性設定值 通過setvalue forkey和 valueforkey實現對屬性的儲存與訪問 kvc乙個致命缺點,必須要鍵值一一對應,比如伺服器返回你三對,而你的模型裡面屬性只有兩個,會異常的 k...

物件導向 鍵值編碼 KVC 與鍵值監聽 KVO

最基本的kvc由nskeyvaluecoding協議提供支援,最基本的操作屬性的兩個方法如下 setvalue 屬性值forkey 屬性名 為指定屬性設定值。valueforkey 屬性名 獲取指定屬性值 在kvc程式設計方式中,無論呼叫setvalue forkey 方法,還是呼叫valuefor...