kvc
即key-value coding
鍵值編碼,是指ios的開發中,可以允許開發者通過key
名直接訪問物件的屬性,或者給物件的屬性賦值。
@inte***ce person : nsobject
@property (nonatomic,assign) int age;
@property (nonatomic,copy) nsstring *name;
@end
複製**
如以上**,我們建立了乙個person
類,他有兩個屬性,分別是age
和name
。 然後我們將其實例化,並且賦予其姓名和年齡屬性:
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"];
複製**
這樣即可獲取物件的name
和age
屬性。
那麼給我們再設定乙個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給獲取p1
的dog
的name
屬性呢? 只需要巢狀一層:
// 獲取
[[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"];
複製**
這裡觀察item
中key
值為number
的屬性。 註冊觀察後,需要實現觀察所呼叫的方法
- (void)observevalueforkeypath:(nsstring *)keypath ofobject:(id)object change:(nsdictionary*)change context:(void *)context
}複製**
然後我們使用乙個nstimer
來重複更改item
的number
屬性。
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檢視裡...