首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

iOS KVO 观察者模式兑现方式

2013-03-21 
iOS KVO 观察者模式实现方式原文:http://gaoyong.diandian.com/post/2012-08-08/40031793795KVO (Key Valu

iOS KVO 观察者模式实现方式
原文:http://gaoyong.diandian.com/post/2012-08-08/40031793795

KVO (Key Value Observing)是ios里面一种特别方便的机制用于“捕捉”对象属性的变化。在概念理解上,是设计模式里面观察者模式的一种实践。

拿一个具体的例子来讲:

有一个数据对象EmployeeData,该对象有一个属性salary

有一个ViewController 用于显示对象EmployeeData的属性salary的值

当salary的值发生变化的时候,ViewController如何显示变化后的新值。

方案一:

    “可以在EmployeeData类弱引用ViewController类,然后在EmployeeData数据发生变化时,调

    用ViewController类的回调函数。这个方法虽然能达到目的,但是会破坏EmployeeData的完整

    性,一个负责数据管理的类,不应当依赖另一个负责视图控制的类;换句话说,EmployeeData

    类不应该知道关于ViewController类的任何事情,甚至不需要知道其从在”

方案二:

使用ios提供的消息中心(NSNotificationCenter)。在此EmployeeData为消息生产者,ViewController为消息消费者。当salary数据发生变化时发送一个消息既可。

ViewController接收到salary数据变化的通知做相对应的业务处理。不足之处如同方案一,EmployeeData对象的salary每次变动都需要发送“通知”。这项工作对EmployeeData自身来讲毫无意义。

方案三:

在ViewController中将自身(self)设置为EmployeeData salary属性值变化的观察者。当salary值发生变化时,执行一个回调方法。这样对“EmployeeData”来讲不用关心除自身业务以

外的事情。避免了方案一和方案二的瑕疵。对ViewController来讲关注谁的变化,注册自己为其的观察者既可。间接轻便。



下面是一些核心的代码。







热点排行