KVO 和 KVC 的区别?

key value coding   ,key value observer

KVC 是 路径访问的规范

KVO 观察某个变量的变化过程    它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了

系统框架已经支持KVO,所以程序员在使用的时候非常简单。

1. 注册,指定被观察者的属性,

2. 实现回调方法

3. 移除观察

假设一个场景,股票的价格显示在当前屏幕上,当股票价格更改的时候,实时显示更新其价格。

kvc:键 – 值编码是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制。
  很多情况下可以简化程序代码。apple文档其实给了一个很好的例子。
  kvo:键值观察机制,他提供了观察某一属性变化的方法,极大的简化了代码。
  具体用看到嗯哼用到过的一个地方是对于按钮点击变化状态的的监控。
  比如我自定义的一个button
  [self addObserver:self forKeyPath:@"highlighted" options:0 context:nil];
  #pragma mark KVO
  - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
  {
  if ([keyPath isEqualToString:@"highlighted"] ) {
  [self setNeedsDisplay];
  }
  }
  对于系统是根据keypath去取的到相应的值发生改变,理论上来说是和kvc机制的道理是一样的。
  对于kvc机制如何通过key寻找到value:
  “当通过KVC调用对象时,比如:[self valueForKey:@”someKey”]时,程序会自动试图通过几种不同的方式解析这个调用。首先查找对象是否带有 someKey 这个方法,如果没找到,会继续查找对象是否带有someKey这个实例变量(iVar),如果还没有找到,程序会继续试图调用 -(id) valueForUndefinedKey:这个方法。如果这个方法还是没有被实现的话,程序会抛出一个NSUndefinedKeyException异常错误。
  (cocoachina.com注:Key-Value Coding查找方法的时候,不仅仅会查找someKey这个方法,还会查找getsomeKey这个方法,前面加一个get,或者_someKey以及_getsomeKey这几种形式。同时,查找实例变量的时候也会不仅仅查找someKey这个变量,也会查找_someKey这个变量是否存在。)
  设计valueForUndefinedKey:方法的主要目的是当你使用-(id)valueForKey方法从对象中请求值时,对象能够在错误发生前,有最后的机会响应这个请求。这样做有很多好处,下面的两个例子说明了这样做的好处。“
  来至cocoa,这个说法应该挺有道理。
  因为我们知道button却是存在一个highlighted实例变量.因此为何上面我们只是add一个相关的keypath就行了,
  可以按照kvc查找的逻辑理解,就说的过去了

时间: 2024-10-07 07:36:32

KVO 和 KVC 的区别?的相关文章

[精辟]KVO 和 KVC 的区别和用法,干货!!!

一.KVO介绍 KVO就是观察者模式,说白了就是你关心的一个值改变了,你就会得到通知.你就可以在你想处理的地方处理这个值. 二.KVO的使用 一般分为三步: 注册监听 使用方法: /** * 添加KVO监听者 * * @param observer 观察者(监听器) * @param keyPath 属性名(要观察的属性) * @param options * @param context 传递的参数 */ - (void)addObserver:(NSObject *)observer for

KVO 与 KVC 区别

还长时间 没来了  今天分享一下 个人总结的 KCO  KVC 笔记: (如有错误,请速速联系我  愿听你的建议!) KVO 与 KVC 区别: KVO 主要用于监听属性属性改变 KVC 主要用于对某一对象的成员变量赋值 KVO:    运用KVO 监听成员属性 时   想要监听哪个 就对哪个属性监听 // KVO 监听属性改变 [item addObserver:self forKeyPath:@"one" options:0 context:nil]; [item addObser

iOS开发——实用篇&KVO与KVC详解

KVO与KVC详解 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听(KVO)特性: 键值编码KVC 键值监听KVO 键值编码KVC 我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象.其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的动态读写,这种方式就是Key Valu

iOS中NSNotification、delegate、KVO三者之间的区别与联系?

iOS中NSNotification.delegate.KVO三者之间的区别与联系? delegate.notification和KVO他们的功能比较类似,那么在实际的编程中,如何选择这些方式呢? 在开发ios应用的时候,我们会经常遇到一个常见的问题:在不过分耦合的前提下,controllers间怎么进行通信.在IOS应用不断的出现三种模式来实现这种通信: 1.委托delegation: 2.通知中心Notification Center: 3.键值观察key value observing,K

KVO、KVC

Key-Value Observing (简写为KVO):当指定的对象的属性被修改了,允许对象接受到通知的机制.每次指定的被观察对象的属性被修改的时候,KVO都会自动的去通知相应的观察者,相当于设计模式中的观察者模式. KVO的优点:当有属性改变,KVO会提供自动的消息通知.这样的架构有很多好处.首先,开发人员不需要自己去实现这样的方案:每次属性改变了就发送消息通知.这是KVO 机制提供的最大的优点.因为这个方案已经被明确定义,获得框架级支持,可以方便地采用.开发人员不需要添加任何代码,不需要设

kvo与kvc

一.概述 KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解. Key-Value Coding (KVC) KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性.KVO 就是基于 KVC 实现的关键技术之一. 一个对象拥有某些属性.比如说,一个 Person 对象有一个 name 和一个 address 属性.以 KVC 说法,Person 对象分别有一个 value 对应他的 nam

KVO与KVC理解

KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解. Key-Value Coding (KVC) KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性.KVO 就是基于 KVC 实现的关键技术之一. 一个对象拥有某些属性.比如说,一个 Person 对象有一个 name 和一个 address 属性.以 KVC 说法,Person 对象分别有一个 value 对应他的 name 和 a

IOS 开发之 KVO和KVC 模式的简单使用

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //1.KVC的使用 //  Key Value Coding的缩写, 表示键值编码 //作用:  通过字符串标示的方式访问对象的property和实例变量 //项目中使用:    使用KVC实现JSON中字典到model的转换 Car *car = [[Car al

KVO与KVC整理资料

KVC/KVO?????????????????? ????第wangzz ????????第http://blog.csdn.net/wzzvictory/article/details/9674431 ?????????????? ????????????????????到?生增?????????????????????????手??wangzzstrive?? ??????增????等 ????第 1????????????你KVC/KVO??????增????????????看?????