Delegate、Notification 和 KVO
作者:
凌晨四点的洛杉矶 | 来源:发表于
2016-02-15 19:40 被阅读94次
Delegate
优点:
- 语法严格, 所有将要听到的事件必须在delegate 协议中有清晰的定义
- delegate 中任一方法未实现就会出现错误
- 协议必须在 controller 的作用域范围内定义
- 没有第三方对象要求监视通信过程
- 在一个控制器中可以定义多个不同的协议, 每个协议有不同的 delegates
- 能够接受调用的协议方法的返回值
缺点:
- 代码量大 : 1.协议定义 2. controller 的 delegate 属性 3.在 delegate 本身中实现 delegate 方法定义
- 释放代理对象时, 要将delegate 改为 nil, 否则调用释放对象的方法会 crash
Notification
优点:
- 代码量少, 实现简单
- 1 对多方式实现简单
- controller 能够传递 context 对象 (字典), 可以携带自定义消息
缺点:
- 编译时不会检查通知是否能被观察者正确处理
- 释放注册的对象时, 需要在通知中心取消取消注册
- 调试时难以追踪
- controller 和观察者需要提前知道通知名称 UserInfodictionary keys, 如果这些没有在工作区间定义 ,可能会出现不同步的情况
- 通知发出后, controller 不能从观察者过得任何反馈信息
KVO
优点:
- 能够提供一种简单的方法实现两个对象间的同步
- 能够对非我们创建的对象, 即内部对象的状态改变做出响应, 而且不需要改变内部对象的实现
- 能够提供观察的属性的最新值以及先前值
- 用key paths 来观察属性, 因此可以观察嵌套对象
- 不需要额外代码来允许观察值能被观察
缺点:
- 观察的属性必须使用 string 来定义, 因此编译器不会出现警告
- 对属性重构将导致我们的观察代码不再可用
- 释放观察者时需要移除观察者
本文标题:Delegate、Notification 和 KVO
本文链接:https://www.haomeiwen.com/subject/liepkttx.html
网友评论