iOS-KVC详解

定义:(Key-Value-Coding)键值编码(间接访问对象属性的机制,以字符串的形式向对象发送消息)

一种使用字符串而不是访问器去访问一个对象实例变量的机制,使用这个机制不需要调用set或者get方法来访问成员变量,它是通过setValue:forKey:和valueForKey:方法。

案例

简单路径:对对象的属性进行赋值和取值

复杂路径:对对象属性的属性进行赋值和取值

KVC 相当于Set和Get方法(键值配对),能够对对象的属性进行赋值和取值

People * p1 = [[People alloc] init];
p1.car.name = @"自行车";
//赋值
//简单路径
[p1 setValue:@"刘备" forKey:@"_name"];
//复杂路径
[p1 setValue:@"三轮车" forKeyPath:@"_car.name"];
//取值
NSString * name = [p1 valueForKey:@"_name"];

KVC 只能对_name进行取值和赋值(_name和name都存在)

Man * man = [[Man alloc] init];
[man setValue:@"亚当" forKey:@"name"];
NSLog(@"01%@",man.description);//此时只输出_name
[man setValue:@"女娲" forKey:@"_name"];
NSLog(@"02%@",man.description);//此时只输出_name

如果没有_name的属性,但是有name这个属性的情况下,可以通过KVC对实例变量_name进行赋值和取值

Woman * woman = [[Woman alloc] init];
[woman  setValue:@"夏娃" forKey:@"name"];
 NSLog(@"%@",woman.description);

总结: 实例变量(属性)

/*
规则:
赋值:
1.先找set方法,如果没有呢?就找_name
2.如果没有_name,找name
3.如果没有name,那么就会崩溃
取值:
1.先找get, 如果没有get 就找_name;
2.如果没有_name,找name
3.如果没有name,就会崩溃
*/

缺点如果key写错时,编译时不会报错,运行时会报错

 

 

posted @ 2018-11-13 19:57  淡然微笑_Steven  阅读(406)  评论(0编辑  收藏  举报