首页 > 其他 > 详细

KVO & 通知 小记

时间:2016-03-19 12:50:52      阅读:178      评论:0      收藏:0      [点我收藏+]

KVO的全称是Key-Value Observing,它实现了一种机制,对所关心的属性对象添加观察者,当属性值发生变化时会得到通知,我们可以对变化做相应的处理。看过设计模式的同学应该知道,这是一种典型的观察者模式。KVO的最大优点就是底层框架已经支持,开发人员不需要实现属性值发生变化时发送通知的方案,这样就大大减少开发的工作量。其次,KVO框架很强大,可以支持多个观察者观察同一属性,或者一个观察者监听不同属性。

KVO的使用比较简单,基本上都是三步:

1.注册观察者

addObserver:forKeyPath:options:context:

2.观察者中实现

observeValueForKeyPath:ofObject:change:context:

3.移除观察者

removeObserver:forKeyPath:






//通知 注意postNotificationName 必须一致 [[NSNotificationCenter defaultCenter] postNotificationName:NotificationName object:self userInfo:dic]; //dic存放在userinfo中 dic中存放要传过去的值是个字典 //接受通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeAction:) name:NotificationName object:nil]; //KVO监听 /*KVO观察者方法 keyPath: 监听的属性名 object: 被观察的对象 change: 属性值 context: 上下设备文 */ [registerCtrl addObserver:self forKeyPath:@"属性名称1" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil]; [registerCtrl addObserver:self forKeyPath:@"属性名称2" options:NSKeyValueObservingOptionNew context:nil]; //触发的事件 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { //object的值是registerCtrl if ([keyPath isEqualToString:@"属性名称1"]) { }else if ([keyPath isEqualToString:@"属性名称2"]) { } }

KVO & 通知 小记

原文:http://www.cnblogs.com/Jenaral/p/5294618.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!