kvc简单介绍

来源:互联网 发布:Linux开机自启tomcat 编辑:程序博客网 时间:2024/05/17 18:02

kvc的基本概念:键值编码是一个用于间接访问对象属性的机制,使用这个机制不用调用存取方法和变量实例,就可以访问对象的属性。

键值编码方法在OC非正式协议NSKEYVALUECoding中声明,默认的实现方法有NSObject提供。

键值编码支持有对象值的属性,同时也支持带有纯数据类型和结构,非对参数和返回类型会被识别并自动封装。

kvc的基本用法

1.设置和访问

键值编码包括setValue:forkey 和valueForKey这两个基本用法,首先看这个对象有没有setter和getter方法,如果不存在

,它将在内部查找名为_key或者key的实例变量。通过kvc可以获取不存在getter方法的对象的属性值和设置不存在setter方法的对象的属性值。在使用setValue:forkey 和valueForKey方法的时候要注意要对对象的基本数据类型如(int 、float、 bool、char)进行装箱封装。

        Deveice *mac =[[Deveice alloc]init];        [mac setValue:@"macbook" forKey:@"name"];        [mac setValue:@8000 forKey:@"price"];
NSString *name =[mac valueForKey:@"name"];        NSLog(@"==%@",name);

2.路径

键值编码还可以支持制定路径,用.隔开

NSNumber *number =  [ps valueForKeyPath:@"deceiveArray.@sum.price"];        NSLog(@"%@",number);
3.一对多的关系

向数组请求一个键值,它会遍历这个数组中的每一个对象来查找这个键值,然后将查询到的结果存放到另一个数组返回给你;

person *ps =[[person alloc]init];Deveice *mac =[[Deveice alloc]init];        [mac setValue:@"macbook" forKey:@"name"];        [mac setValue:@8000 forKey:@"price"];        NSString *name =[mac valueForKey:@"name"];        NSLog(@"==%@",name);        Deveice *iPhone =[[Deveice alloc]init];        [iPhone setValue:@"iphone" forKey:@"name"];        [iPhone setValue:@5000 forKey:@"price"];                Deveice *iPad =[[Deveice alloc]init];        [iPad setValue:@"ipad" forKey:@"name"];        [iPad setValue:@3800 forKey:@"price"];              NSArray *nameArray =@[mac,iPhone,iPad];        [ps setValue:@"jobs" forKeyPath:@"name"];        [ps setValue:nameArray forKey:@"deceiveArray"];      NSNumber *number =  [ps valueForKeyPath:@"deceiveArray.@sum.price"];        NSLog(@"%@",number);                NSLog(@"%@",[ps valueForKey:@"name"]);

kvc的简单运算

如 count,min,max,avg,sum

语法格式要在做这些运算前加上@,比如@sum,@min

 NSNumber *number =  [ps valueForKeyPath:@"deceiveArray.@sum.price"];        NSLog(@"%@",number);








0 0
原创粉丝点击