delegate, Notification,KVO优缺点?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delegate, Notification,KVO优缺点?相关的知识,希望对你有一定的参考价值。
平时在开发中,经常会遇到不同的类之间进行通信,我们平时会有以下几种选择:
1.delegate
2.Notification
3.KVO
特点如下:
delegate:
1.语法严格,定义清晰。如协议的定义实现。
2.逻辑清楚,控制流程可跟踪和识别。
3.一个类中可以定义多个协议,每个协议对应不同的delegate.
4.定义代码比较多,如协议,delegate属性,代理方法的实现。
5.一对一通信。
notification:
1.不需要写多少代码,实现比较简单。
2.一个对象发出的通知,多个对象能进行反应,一对多的方式实现很简单。
3.在编译期不会检查通知是否能够被观察者正确的处理;
4.在释放注册的对象时,需要在通知中心取消注册;
5.在调试的时候应用的工作以及控制过程难跟踪;
6.需要第三方对象来管理controller与观察者对象之间的联系;
7.controller和观察者需要提前知道通知名称、UserInfo dictionary keys。如果这些没有在工作区间定义,那么会出现不同步的情况;
8.通知发出后,controller不能从观察者获得任何的反馈信息(相比较delegate)。
KVO :
1.能够提供一种简单的方法实现两个对象间的同步。例如:model和view之间同步;
2.能够对非我们创建的对象,即内部对象的状态改变作出响应,而且不需要改变内部对象(SKD对象)的实现;
3.能够提供观察的属性的最新值以及先前值;
4.用key paths来观察属性,因此也可以观察嵌套对象;
5.完成了对观察对象的抽象,因为不需要额外的代码来允许观察值能够被观察
6.可以一对多。
7.我们观察的属性必须使用strings来定义。因此在编译器不会出现警告以及检查;
8.对属性重构将导致我们的观察代码不再可用;
9.复杂的“IF”语句要求对象正在观察多个值。这是因为所有的观察代码通过一个方法来指向;
10.当释放观察者时不需要移除观察者。
根据以上的特点,就可以看出它们之间的区别
1.delegate比NSNotification/KVO效率高,更加直接。
2、KVO和NSNotification这两个都是负责发出通知,剩下的事情就不管了,没有返回值,delegate可以有返回值。
3.delegate只是一对一,KVO和NSNotification可以一对多。
总结:当处理属性层的消息的事件时候,使用KVO,其他的尽量使用delegate,如果代码处理的东西确实很简单,那么用NSNotification会方便些。
以上是关于delegate, Notification,KVO优缺点?的主要内容,如果未能解决你的问题,请参考以下文章
iOS开发Delegate,Notification,Block使用心得
Delegate,Block,Notification, KVC,KVO,Target-Action