标签:
.m文件
1 #import <Foundation/Foundation.h> 2 #import "Person.h" 3 int main(int argc, const char * argv[]) { 4 @autoreleasepool { 5 /* 6 KVC:全称Key Value Coding 是间接访问对象实例变量的方式 为对象中对应的实例变量赋值 7 用setValue:forKey: 8 赋值原理:给定一个Key,比如name 9 1.先查找对象中有没有对应的setName方法,如果有直接调用该方法进行赋值,如果没有转步骤2 10 2.再查找对象中有没有定义实例变量为_那么,如果有直接为该实例变量赋值,否则转步骤3 11 3.查找对象中有没有定义实例变量叫做name,如果有直接为实例变量赋值,否则转步骤4 12 4.自动调用对象中的方法setValue:forUndefinedKey: 13 KVC取值过程:调用valueForKey:给定一个Key比如name 14 1.查找对象中有没有对应的getter方法,如果有则调用该方法返回对应的实例变量的值,如果没有转步骤2 15 2.再查找有没有定义对应的_name实例变量,如果有直接取出该实例变量存储的值,否则转步骤3 16 3.再查找有没有定义对应的name实例变量,如果有直接取出该实例变量存储的值,否则转步骤4 17 4.自动调用对象中的方法Value:forUndefindKey: 18 19 */ 20 //KVC赋值过程 21 Person *person = [[Person alloc] init]; 22 [person setValue:@"皮拉夫大王" forKey:@"name"]; 23 [person setValue:@"孙悟空" forKey:@"name"]; 24 25 NSLog(@"%@",person.name); 26 //KVC取值过程 27 NSLog(@"%@",[person valueForKey:@"name"]); 28 //setValue:forKeyPath:根据路径给实例变量赋值或取值 29 [person setValue:@"乐乐" forKeyPath:@"person.name"]; 30 NSLog(@"%@",[person valueForKeyPath:@"person.name"]); 31 //使用KVC把字典封装成对象 32 NSDictionary *dict = @{@"name":@"小明",@"sex":@"男",@"address":@"你猜"}; 33 // person.name = [dict objectForKey:@"name"]; 34 // person.sex = [dict objectForKey:@"sex"]; 35 // person.address = [dict objectForKey:@"address"]; 36 37 [person setValuesForKeysWithDictionary:dict]; 38 NSLog(@"%@",person); 39 40 } 41 return 0; 42 }
使用KVC把字典封装成对象,用来赋值比直接给对象赋值方便
Person.h文件
1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObject 4 @property (nonatomic, retain)NSString *name; 5 @property (nonatomic, retain)NSString *sex; 6 @property (nonatomic, retain)NSString *address; 7 @end
Person.m文件
1 @implementation Person 2 -(id)valueForUndefinedKey:(NSString *)key 3 { 4 NSLog(@"玲玲说敲了代码就找到老婆了"); 5 return nil; 6 } 7 //如果没有对应的key,那么系统自动调用下面的方法,该方法默认抛出一个异常,让系统崩溃. 8 //如果不想让方法抛出异常,那么我们需要自己重写这个方法 9 -(void)setValue:(id)value forUndefinedKey:(nonnull NSString *)key 10 { 11 NSLog(@"是不是傻,没有还来"); 12 13 } 14 //重写该方法可以输出本来对象的数据(而不再是Unicode字符编码) 15 -(NSString *)description 16 { 17 return [NSString stringWithFormat:@"name = %@,sex = %@, address = %@",self.name,self.sex,self.address]; 18 } 19 @end
标签:
原文地址:http://www.cnblogs.com/DevinSMR/p/5142888.html