十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
KVC类似于java中的反射,它是通过一个字符串 key 来获取和设置对应类中成员属性的值
而key就是用来遍历某一个类,去查找类内部是否有与key同名的成员属性
所以对于KVC来说,成员属性无私有 共有之分,只要在类中,只要能找到相对应的就可以设置值
作用:
1. 给私有的成员属性赋值
2. 系统底层的给成员属性赋值都是采用KVC
演示代码
目前成都创新互联已为数千家的企业提供了网站建设、域名、虚拟空间、网站托管维护、企业网站设计、福贡网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。 1 #import
2 #import "Person.h" 3 int main(int argc, const char * argv[]) {
4 @autoreleasepool {
5
6 // // 直接为对象的属性赋值
7 // Person *p1 = [[Person alloc] init];
8 // p1.name = @"张三";
9 //
10 // Dog *chihuahua = [[Dog alloc] init];
11 // chihuahua.name = @"吉娃娃";
12 // p1.dog = chihuahua;
13 //
14 // //NSLog(@"%@ --- %@", p1.name, p1.dog.name);
15 //
16 //
17 //
18 //
19 // // 通过kvc的方式为对象赋值
20 // Dog *husky = [[Dog alloc] init];
21 // husky.name = @"哈士奇";
22 //
23 //
24 // [p1 setValue:@"李四" forKeyPath:@"name"];
25 // [p1 setValue:@10 forKeyPath:@"age"];
26 // [p1 setValue:husky forKeyPath:@"dog"];
27 //
28 //
29 // NSLog(@"%@---%d", p1.name, p1.age);
30 // NSLog(@"%@", p1.dog.name);
31
32
33 // //-----------------------------------
34 // Person *p1 = [[Person alloc] init];
35 //
36 // NSString *value = @"husky@yahoo.com";
37 //
38 // NSString *property = @"email";
39 //
40 //
41 // [p1 setValue:value forKeyPath:property];
42 //
43 // NSLog(@"%@", p1.name);
44 //
45 // NSLog(@"%@", p1.email);
46
47
48 //------------------------------
49 // Person *p1 = [[Person alloc] init];
50 // Dog *d = [[Dog alloc] init];
51 //
52 // [p1 setValue:@"rzc" forKeyPath:@"name"];
53 // [p1 setValue:@"rzc@yahoo.com" forKeyPath:@"email"];
54 // [p1 setValue:@18 forKeyPath:@"age"];
55 // [p1 setValue:d forKeyPath:@"dog"];
56 //
57 // // @"dog.name" 这个就叫做keyPath 或者叫 "属性的路径"
58 // [p1 setValue:@"哈士猫" forKeyPath:@"dog.name"];
59 // NSLog(@"%@---%d---%@--%@",p1.name,p1.age, p1.email, p1.dog.name);
60
61
62 // NSDictionary *bz = @{
63 // @"name" : @"任智超",
64 // @"age" : @28,
65 // @"email" : @"rzc0714@163.com",
66 // @"dog" : @{@"name" : @"加肥猫"}
67 // };
68 //
69 // [p1 setValuesForKeysWithDictionary:bz];
70 // NSDictionary *dogDict = (NSDictionary *)p1.dog;
71 // NSLog(@"%@---%d---%@--%@",p1.name,p1.age, p1.email, dogDict[@"name"]);
72
73
74
75 //---------------------------------------------------
76 // Person *p1 = [[Person alloc] init];
77 // p1.name = @"张三";
78 //
79 // Dog *chihuahua = [[Dog alloc] init];
80 // chihuahua.name = @"吉娃娃";
81 // p1.dog = chihuahua;
82 //
83 // NSString *name = [p1 valueForKeyPath:@"name"];
84 // NSString *dogName = [p1 valueForKeyPath:@"dog.name"];
85 //
86 // NSLog(@"%@----%@", name, dogName);
87
88
89
90 //------------把对象转成字典--------------------------------------- 91 Person *p1 = [[Person alloc] init];
92 p1.name = @"张三";
93 p1.age = 15;
94 p1.email = @"zs@yahoo.com";
95
96 Dog *chihuahua = [[Dog alloc] init];
97 chihuahua.name = @"吉娃娃";
98 p1.dog = chihuahua;
99
100 // 把对象转成字典101 NSDictionary *dict = [p1 dictionaryWithValuesForKeys:@[@"name", @"age", @"email", @"dog"]];
102
103 NSLog(@"%@", dict);
104
105 NSLog(@"%@", [dict[@"dog"] class]);
106 NSLog(@"%@", [dict[@"dog"] name]);
107
108
109
110 }
111 return 0;
112 }