OC KVC與KVO簡單介紹

2021-09-24 07:39:33 字數 3148 閱讀 6574

kvckey-value coding鍵值編碼,是指ios的開發中,可以允許開發者通過key名直接訪問物件的屬性,或者給物件的屬性賦值。

@inte***ce person : nsobject

@property (nonatomic,assign) int age;

@property (nonatomic,copy) nsstring *name;

@end

複製**

如以上**,我們建立了乙個person類,他有兩個屬性,分別是agename。 然後我們將其實例化,並且賦予其姓名和年齡屬性:

person *p1 =[person new];

p1.name = @"kobe";

p1.age = 30;

複製**

這是常規的賦值方式,那麼kvc是如何賦值的呢?

[p1 setvalue:@"kobe"

forkey:@"name"];

[p1 setvalue:@"38"

forkey:@"age"];

複製**

如以上**,通過kvc,我們可以直接使用鍵值對的方式對物件的屬性進行賦值。

同理,獲取屬性也可以使用鍵值對的方式:

[p1 valueforkey: @"name"];

[p1 valueforkey:@"age"];

複製**

這樣即可獲取物件的nameage屬性。

那麼給我們再設定乙個dog

@inte***ce dog : nsobject

@property (nonatomic,copy) nsstring *name;

@end

複製**

person類增加乙個dog屬性

@property (nonatomic,strong) dog *dog;

複製**

例項化dog物件並初始化,然後賦值給person物件

dog *dog1 = [dog new];

dog1.name = @"旺財";

p1.dog = dog1;

複製**

那麼如何使用kvc給獲取p1dogname屬性呢? 只需要巢狀一層:

// 獲取

[[p1 valueforkey:@"dog"] valueforkey:@"name"];

// 設定

[[p1 valueforkey:@"dog"] setvalue:@"狗狗"

forkey:@"name"];

複製**

還有一種簡潔的方法就是使用以下方法

// 設定

[p1 setvalue:@"狗狗"

forkeypath:@"dog.name"];

// 獲取

[p1 valueforkeypath:@"dog.name"];

複製**

直接使用 "." 連線屬性即可。

kvo 即key-value observing是基於 kvc 的一種觀察者模式,它可以通過 kvc 的方式對物件的屬性觀測,當keypath的值變化時會發出通知。

kvo的實現是以下三個步驟:

首先我們先建立乙個類用於數值變化,這裡就叫kvoitem類,給它新增乙個int型別屬性number

@inte***ce kvoitem : nsobject

@property (nonatomic,assign) int number;

@end

複製**

然後建立並初始化物件,並為其新增觀察:

item = [kvoitem new];

item.number = 0;

[item addobserver:self forkeypath:@"number" options:nskeyvalueobservingoptionold|nskeyvalueobservingoptionnew context:@"kvotest"];

複製**

這裡觀察itemkey值為number的屬性。 註冊觀察後,需要實現觀察所呼叫的方法

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

}複製**

然後我們使用乙個nstimer來重複更改itemnumber屬性。

nstimer *timer = [nstimer scheduledtimerwithtimeinterval:3 repeats:yes block:^(nstimer *timer)];

[timer fire];

複製**

並且不要忘了在dealloc方法中登出觀察:

-(void)dealloc

複製**

執行後我們可以看到在控制台列印以下訊息:

change from 0 to 1

change from 1 to 2

change from 2 to 3

change from 3 to 4

複製**

KVO的簡單使用

kvo key value observing 主要用於檢視 資料互動,比如介面中相關資料發生了變化,介面的顯示也要跟著變化,這時候就需要 kvo 建立介面和資料之間的連線。1.使用場景一 stockobj.h import inte ce stockobj nsobject property no...

KVO與通知的區別

kvo提供一種機制,當指定的被觀察的對像的屬性被修改後,kvo會自動通知響應的觀察者,kvc 鍵值編碼 是kvo的基礎 通知 是一種廣播機制,在實踐發生的時候,通過通知中心物件,乙個物件能夠為所有關心這個時間發生的物件傳送訊息,兩者都是觀察者模式,不同在於kvo是被觀察者直接傳送訊息給觀察者,是物件...

關於swift中KVO的簡單使用

通過kvo實現檢視背景顏色的輪換 class viewcontroller uiviewcontroller override func didreceivememorywarning class colormodel nsobject func timeaction 這個是colorview檢視裡...