kvc,即
:key-value coding,它是一種使用字串識別符號,間接訪問物件屬性的機制,它是很多技術的基礎。
主要的方法就兩個,setvalue:forkey,valueforkey
在programming guide中說,使用kvc可以簡化**,但事實上使用起來,還是要看具體情況。
**例項:
1.首先定義兩個datamodel,這種datamodel定義是無法訪問屬性的
[cpp]view plain
copy
print?
@inte***ce bookdata : nsobject
@end
@implementation bookdata
@end
@inte***ce bookdata : nsobject[cpp]view plain@end
@implementation bookdata
@end
copy
print?
@inte***ce authordata : nsobject
@end
@implementation authordata
@end
@inte***ce authordata : nsobject@end
@implementation authordata
@end
2.使用kvc
[cpp]view plain
copy
print?
bookdata * book1 = [[bookdata alloc] init];
[book1 setvalue:@"english" forkey:@"bookname"];
[book1 setvalue:@"20.0" forkey:@"price"];
authordata * author1 = [[authordata alloc] init];
[author1 setvalue:@"tom" forkey:@"name"];
[book1 setvalue:author1 forkey:@"author"];
nslog(@"value=%@",[book1 valueforkey:@"bookname"]);
nslog(@"price=%f",[[book1 valueforkey:@"price"] floatvalue]);
nslog(@"author=%@",[book1 valueforkeypath:@"author.name"]);
[book1 release];
bookdata * book1 = [[bookdata alloc] init];[book1 setvalue:@"english" forkey:@"bookname"];
[book1 setvalue:@"20.0" forkey:@"price"];
authordata * author1 = [[authordata alloc] init];
[author1 setvalue:@"tom" forkey:@"name"];
[book1 setvalue:author1 forkey:@"author"];
nslog(@"value=%@",[book1 valueforkey:@"bookname"]);
nslog(@"price=%f",[[book1 valueforkey:@"price"] floatvalue]);
nslog(@"author=%@",[book1 valueforkeypath:@"author.name"]);
[book1 release];
3.注意事項,在使用的時候,key值不能寫錯,也就是屬性的名字不能寫錯,大小寫也是敏感的。
4.回到了最初的問題,應該什麼時候使用kvc呢?
像上面的這種datamodel定義的方法,從程式設計師的角度講,我感覺是不夠規範的,起碼應該保證正常訪問,不管是用系統的get/set方式,或者是自己定義介面(getbookprice,名字看起來友好一些的)。
在官方的key-value observing programming guide中有段**,演示如何簡化**了,有興趣的朋友可以看看。
個人對kvc的理解,有什麼不對請指教。
ios KVC的概述與使用
kvc,即 key value coding,它是一種使用字串識別符號,間接訪問物件屬性的機制,它是很多技術的基礎。主要的方法就兩個,setvalue forkey,valueforkey 在programming guide中說,使用kvc可以簡化 但事實上使用起來,還是要看具體情況。例項 1.首...
ios KVC的概述與使用
kvc,即 key value coding,它是一種使用字串識別符號,間接訪問物件屬性的機制,它是很多技術的基礎。主要的方法就兩個,setvalue forkey,valueforkey 在programming guide中說,使用kvc可以簡化 但事實上使用起來,還是要看具體情況。例項 1.首...
CountDownLatch的概述與使用
countdownlatch是一種同步幫助,允許乙個或多個執行緒等待,直到在其他執行緒中執行的一組操作完成。強調乙個執行緒或多個執行緒等待其他執行緒操作完成後才能進行操作。例如在英雄聯盟中主線程是開始遊戲,這個主線程開始操作前需要等待10個玩家也就是其他十個執行緒全部載入完成後才能執行。public...