标签:
转载自http://www.tuicool.com/articles/2aYfy2
Key-value coding,它是一种使用字符串标识符,间接访问对象属性的机制,而不是直接调用getter 和 setter方法。通常我们使用valueForKey 来替代getter 方法,setValue:forKey来代替setter方法。
首先来看一看KVC与setter,getter方法赋值的区别
Persion *person = [ [Person alloc] init ]; //不使用KVC person.name = @"hufeng" ; //使用KVC的写法 [person setValue:@"hufeng" forKey:@"name"];
下面我们写个复杂点的:我们有一个人 这个人有一个手机 这个手机类 有一个电池类 我们要获取这个电池类。
//使用属性 Persion *person = [ [Person alloc] init ]; Phone *phone = person.phone; Battery *battery = phone.battery;
//使用KVC
Battery *battery = [person valueForKeyPath: @"phone.battery" ];
注意- valueForKeyPath 里面的值是区分大小写的,你如果写出Phone.Battery 是不行的。
KVC 最常用的还是在序列化和反序列话对象。我们经常需要把json字符串反序列化成我们想要的对象 下面是一个例子 将字典用NSKeyedArchiver 序列化成对象。
- (id)initWithDictionary:(NSDictionary *)dictionary { self = [self init]; if (self){ [self setValuesForKeysWithDictionary:dictionary]; } return self; }
标签:
原文地址:http://www.cnblogs.com/superorangecc/p/5459060.html