键值编码的基本概念 创新互联公司是一家集网站建设,南澳企业网站建设,南澳品牌网站建设,网站定制,南澳网站建设报价,网络营销,网络优化,南澳网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。1:键值编码是一个用于简介访问对象属性的机制,使用该机制不需要调用存取方法和变量实例 就可以访问对象属性。 2:键值编码方法在Objective-C非正式协(类别)NSKeyValueCoding中被声明,默认的实现方法 由NSObject提供。 3:键值编码支持带有对象指的属性,同时也支持数值类型和结构。非对象参数和返回类型会被 识别并自动封装/解封。 设置与访问: 键值编码洪的基本调用包括-valueForKey:和setValue:forKey:这两个方法,他们以字符串的形式 向对象发送消息,字符串是我们关注属性的关键,看下面的一个设置和访问的例子: Person *person=[[Person alloc]init]; NSMutableString *name=[[NSMutableString alloc]initWithString:@"张三"]; [person setValue:name forKey:@"name"]; NSLog(@"张三 name :%@",[person valueForKey:@"name"]); 首先去检查是否存在setter,getter方法,如果不存在,它将在内部查找名_key或key的实例变量。如果还是没有那就会报错误。通过KVC可以获取不存在getter方法的对象值,无需通过对象指针直接访问。 【注意】:当我们通过setValue:forKey:设置对象的值,或者valueForKey:来获取对象的值时,如果对 象的实例变量为基本数据类型时(例如:char,int,float,BOOL),我们需要对这些数据类型进行封装。 路径和一对多的关系 路径: 除了上面通过键值进行设置和访问意外,键值还支持指定路径,像文件一样。用"."号隔开。实例如下: Person *person=[[Person alloc]init]; Auther *auther=[[Auther alloc]init]; [auther setValue:@"IOS开发" forKey:@"title"]; NSMutableString *name=[[NSMutableString alloc]initWithString:@"张三"]; [person setValue:name forKey:@"name"]; [person setValue:auther forKey:@"auther"]; NSLog(@"name :%@",[person valueForKey:@"name"]); NSString *title=[person valueForKeyPath:@"auther.title"]; NSLog(@"title :%@",title); 一对多关系: 如果向NSArray请求一个键值,它实际上回查询数组中的每个对象来查找这个键值,然后将查询结果 打包到另一个数组中并返回给你。实例如下: //一对多关系 NSMutableArray *persons=[NSMutableArray arrayWithCapacity:3]; for(int i=0;i<3;i++){ Person *peson1=[[Person alloc]init]; NSString *name=[NSString stringWithFormat:@"person_%d",i]; [peson1 setValue:name forKey:@"name"]; [persons addObject:peson1]; [peson1 release]; } [person setValue:persons forKey:@"rePerson"]; NSArray *nameArray= [person valueForKeyPath:@"rePerson.name"]; NSLog(@"%@",nameArray); KVC的简单运算: 此外,还可以应用一些字符做简单运算。sum,min,max,avg,count //属性相加 NSString *sum= [person valueForKeyPath:@"rePerson.@sum.age"]; NSLog(@"sum = %@",sum); //数量 NSString *count= [person valueForKeyPath:@"rePerson.@count.age"]; NSLog(@"count = %@",count); //大值 NSString *max= [person valueForKeyPath:@"rePerson.@max.age"]; NSLog(@"max = %@",max); //最小值 NSString *min= [person valueForKeyPath:@"rePerson.@min.age"]; NSLog(@"min = %@",min); //平均值 NSString *avg= [person valueForKeyPath:@"rePerson.@avg.age"]; NSLog(@"avg = %@",avg); 另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。 本文题目:【Objective-C】OC中键值编码(KVC)的概念和使用方法-创新互联 分享地址:http://lswzjz.com/article/dcjdeo.html |