关于kvc,在苹果开发文档中有详细的介绍:About Key-Value Coding
都知道面向对象编程的三个特征:封装,继承和多态。其中封装就是将一个东西的特点、行为封装起来,向外界暴露出一定的接口,外界只能通过这些接口来使用、调配这个东西。但是很多时候我们又需要直接去访问这个东西的一些特点,比如Person类又name、age、weight、gender、profession等等属性,我们从一个表格中获取到了这样一个数据:
dict = {@"name":@"Zhang Xiao Ming", @"age":@"18", @"weight":@"120", @"profession":@"student"}
如果我们需要将这个数据变成一个Person对象,那就需要实例化一个Person,比如xiaoming,然后这样写
xiaoming.name = dict[@"name"];
xiaoming.age = dict[@"age"];
xiaoming.weight = dict[@"weight"];
xiaoming.profession = dict[@"profession];
...// 等等等
如果Person有100个属性,就得写一百行这样的代码,而且如果某一个属性的名字变了,这些代码就得跟着改变,于是出现了kvc,它就是为了弥补只能通过对象暴露出的接口访问属性的一个缺陷(人们总是在制定规则-打破规则)。
kvc的一般用法:
NSError* error;
NSString* name = @"John";
if ([person validateValue:&name forKey:@"name" error:&error]) {
[person setValue:name forKey:@"name"];
}
当然,还有好多用法和注意事项,这里没有写出来,敬请期待。。。