KVC/KVO的理解

KVC/KVO 這方面知識以前在面試的時候遇到過,平時使用的并不多,但是查了一些博客后覺得這個東西很重要,今后應該多嘗試使用到程序中去.


這方面知識我是從一片博客中了解的,自己寫了小程序測試了一下.博客地址在這里,感謝博主!


KVC:即Key-Value Coding,是一個非正式的 Protocol界斜,提供一種機制來間接訪問對象的屬性屎媳。KVO 就是基于 KVC 實現(xiàn)的關(guān)鍵技術(shù)之一厚棵。

一個對象擁有某些屬性。比如說嗜愈,一個 Person 對象有一個 name 和一個 address 屬性。以 KVC 說法料扰,Person 對象分別有一個 value 對應他的 name 和 address 的 key昵骤。 key 只是一個字符串,它對應的值可以是任意類型的對象交惯。

下面附上代碼

@interfacePerson :NSObject

@property(nonatomic,copy)NSString*name;

@property(nonatomic,copy)NSString*age;

@property(nonatomic,copy)NSString*sex;

@property(nonatomic,copy)NSString*addr;

@property(nonatomic,copy)NSString*Test;//如果這里是大寫開頭,而dict里面是小寫開頭,則會報錯,反之,如果這里是小寫,那么dict里面首字母是大小寫不影響

@property(nonatomic,retain)Person*per;

@implementationPerson

-(void)setValue:(id)value forUndefinedKey:(NSString*)key//如果dict里面的鍵值對的key本類中沒有定義,寫這個函數(shù)則會消除報錯,本質(zhì)上是,當使用setValue:forKey來定義本類未定義的值時,使用這個類來消除錯誤

{

}

#if0

Person *p = [[Person alloc] init];

[p setValue:@"張紅"forKey:@"name"];

[p setValue:@"13"forKey:@"age"];

[p setValue:@"東部野馬"forKey:@"addr"];

[p setValue:@"Error"forKey:@"error"];

NSDictionary *dict =@{@"name":@"海南",@"age":@"22",@"sex":@"boy",@"addr":@"東南海",@"errors":@"err",@"Test":@"Test"};

Person *p1 = [[Person alloc] init];

[p1 setValuesForKeysWithDictionary:dict];

NSLog(@"name = %@,sex = %@,age = %@,addr = %@,test = %@",[p1 valueForKey:@"name"],[p1 valueForKey:@"sex"],[p1 valueForKey:@"age"],[p1 valueForKey:@"addr"],[p1 valueForKey:@"Test"]);

NSLog(@"%@",[p valueForKey:@"name"]);

Person *per = [[Person alloc] init];

//per = [p valueForKey:@"per"];

per.name =@"testname";

[p setValue:per forKey:@"per"];

//[p setValue:@"namejtest" forKeyPath:@"per.name"];

NSLog(@"test = %@",[p valueForKeyPath:@"per.name"]);

#else

arr= [NSMutableArrayarray];

Person*p2 = [[Personalloc]init];

Person*per = [[Personalloc]init];

[p2setValue:perforKey:@"per"];

[p2addObserver:selfforKeyPath:@"per.name"options:0context:(__bridgevoid*)(KVO_CONTEXT_ADDRESS_CHANGED)];

[p2setValue:@"chutiyan"forKeyPath:@"per.name"];

UIButton*btn = [UIButtonbuttonWithType:UIButtonTypeCustom];

btn.frame=CGRectMake(100,100,100,40);

btn.backgroundColor= [UIColorgreenColor];

[self.viewaddSubview:btn];

[btnaddTarget:selfaction:@selector(btnClick)forControlEvents:UIControlEventTouchUpInside];

index=0;

[arraddObject:p2];

#endif

-(void)btnClick

{

for(Person*perinarr) {

[persetValue:[NSStringstringWithFormat:@"%ldName",index]forKeyPath:@"per.name"];

}

index++;

}

-(void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context

{

if(context == (__bridgevoid*)(KVO_CONTEXT_ADDRESS_CHANGED)) {

NSString*name = [objectvalueForKeyPath:@"per.name"];

NSLog(@"%@",name);

}

}

-(void)dealloc

{

for(Person*perinarr) {

[perremoveObserver:selfforKeyPath:@"name"];

}

//[super dealloc];

}

原博客里舉得例子比較好,我這個代碼完全自己測試寫的,貼上來為了自己以后好回憶,順便看看代碼思想有沒有進步.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末次泽,一起剝皮案震驚了整個濱河市穿仪,隨后出現(xiàn)的幾起案子席爽,更是在濱河造成了極大的恐慌,老刑警劉巖啊片,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件只锻,死亡現(xiàn)場離奇詭異,居然都是意外死亡紫谷,警方通過查閱死者的電腦和手機齐饮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門捐寥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人祖驱,你說我怎么就攤上這事握恳。” “怎么了捺僻?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵乡洼,是天一觀的道長。 經(jīng)常有香客問我匕坯,道長束昵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任葛峻,我火速辦了婚禮锹雏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘术奖。我一直安慰自己礁遵,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布腰耙。 她就那樣靜靜地躺著榛丢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挺庞。 梳的紋絲不亂的頭發(fā)上晰赞,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音选侨,去河邊找鬼掖鱼。 笑死,一個胖子當著我的面吹牛援制,可吹牛的內(nèi)容都是我干的戏挡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼晨仑,長吁一口氣:“原來是場噩夢啊……” “哼褐墅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起洪己,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤妥凳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后答捕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逝钥,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年拱镐,在試婚紗的時候發(fā)現(xiàn)自己被綠了艘款。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片持际。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖哗咆,靈堂內(nèi)的尸體忽然破棺而出蜘欲,到底是詐尸還是另有隱情,我是刑警寧澤晌柬,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布芒填,位于F島的核電站,受9級特大地震影響空繁,放射性物質(zhì)發(fā)生泄漏殿衰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一盛泡、第九天 我趴在偏房一處隱蔽的房頂上張望闷祥。 院中可真熱鬧,春花似錦傲诵、人聲如沸凯砍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悟衩。三九已至,卻和暖如春栓拜,著一層夾襖步出監(jiān)牢的瞬間座泳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工幕与, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挑势,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓啦鸣,卻偏偏與公主長得像潮饱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子诫给,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容