码迷,mamicode.com
首页 > 其他好文 > 详细

KVC/KVO

时间:2015-10-15 12:55:18      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

 

这种间接机制包括:直接调用对象的方法、属性的点表示法或设置实例变量来直接更改对象状态

 

                  键/值编码(KVC),间接更改对象状态的方式,实现方法是使用字符串

                  描述要更改的对象状态部分

 

KVC简介

键/值编码中的基本方法包括-valueForKey:和-setValue:forKey:,以字符串的形式向对象发送消息

valueForKey:首先查找以键-key或-isKey命名的getter方法

             如果不存在getter方法,它将在对象内部查找名为_key或key的实例变量

             如果没有通过@synthesize提供存取方法,valueForKey将会查找实例变量{_字符串值}和{字符串

             值}。这一点非常重要-valueForKey在Objective-C运行时使用元数据打开对象并进入其中查找需

             要的信息,在C和C++中不能执行这种操作,通过KVC可以获取不存在getter方法的对象值,无需

             通过对象指针直接访问实例变量

 

 

 

setValueForKey:使用它时它自动将标量值(int、float、struct)放入NSNumber或NSValue中

               它也能自动将标量从这些对象中取出,KVC具有自动包装功能,常规方法调

               用和属性语法不具备

Tip:水果公司以下划线开头的实行保存实例变量,请不要在其他地方使用下划线开头

 

路径

键/值编码还支持指定键路径

-valueForKeyPath和-setValueForKeyPath方法访问键路径

键路径深度是任意的,其形态更像是xml中调用子节点

 

整体操作

在KVC中向NSArray请求一个键值,它它实际上会查询数组中每个对象来查找这个键值,然后将查询结果打包到另一个数组中并返回给你。这种方法也适用于通过键路径访问的对象内部的数组

valueForKeyPath:将路径分解并从做向右进行处理

                不能再键路径中为这些数组添加索引

 

键/路径还可以引用运算符进行运算,例如获取一组值的平均值或返回这组值的最小值和最大值

举例代码:

NSNumber *count;

count = [garage valueForKeyPath: @"cars.@count"];

NSLog (@"We have %@ cars", count);

cars.@count 

之中:cars用于获取cars属性,他是来自garage的NSArray类型的值(其实他是NSMutableArray,

                                    但如果不更改内容,可将其视为NSArray)

               @count,其中的@符号意味着后面进行一些运算

KVC/KVO

标签:

原文地址:http://www.cnblogs.com/stuyingiOS/p/4881869.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!