KVC,即:Key-value coding,它是一種使用字串標識符,間接訪問對象屬性的機制,它是很多技術的基礎。
主要的方法就兩個,setValue:forKey,valueForKey
在Programming Guide中說,使用KVC可以簡化代碼,但事實上使用起來,還是要看具體情況。
代碼執行個體:
1.首先定義兩個DataModel,這種DataModel定義是無法訪問屬性的
@interface BookData : NSObject { NSString * bookName; float price; AuthorData * author;}@end@implementation BookData@end
@interface AuthorData : NSObject { NSString * name;}@end@implementation AuthorData@end
2.使用KVC
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的理解,有什麼不對請指教。