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会方便些。

时间: 2024-08-02 10:58:33

delegate, Notification,KVO优缺点?的相关文章

【转载】iOS中delegate,notification,KVO三种模式实现通信的优缺点

原帖地址:http://blog.csdn.net/yangxt/article/details/8176636 在开发iOS中,有三种模式来实现controller之间的通信: 1.委托delegation: 2.通知中心Notification Center: 3.键值观察key value observing,KVO 因此,那为什么我们需要这些模式以及什么时候用它以及什么时候不用它. 1.delegate 基本特征: 一 个controller定义了一个协议(即一系列的方法定义).该协议描

delegate Notification KVO

区别: delegate 的 优势 : 1.非常严格的语法.所有将听到的事件必须是在delegate协议中有清晰的定义. 2.如果delegate中的一个方法没有实现那么就会出现编译警告/错误 3.协议必须在controller的作用域范围内定义 4.在一个应用中的控制流程是可跟踪的并且是可识别的: 5.在一个控制器中可以定义定义多个不同的协议,每个协议有不同的delegates 6.没有第三方对象要求保持/监视通信过程. 7.能够接收调用的协议方法的返回值.这意味着delegate能够提供反馈

iOS: 消息通信中的Notification&KVO

iOS: 消息通信中的Notification&KVO 在 iOS: MVC 中,我贴了张经典图: 其中的Model向Controller通信的Noification&KVO为何物呢? 在功能上说,delegate.Notification以及KVO的功能类似,都是作用于 OC中对象 的消息通信.但三者的使用场景是不同的. 简单的说Delegate是一种回掉函数,更多的用在一对一的场合,可参考 iphone:delegate机制 : Notification 用得较少,使用Notifica

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

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

delegate,notifucation,KVO三种模式实现通信的优缺点

在开发ios应用的时候,我们会经常遇到一个常见的问题:在不过分耦合的前提下,controllers间怎么进行通信.在IOS应用不断的出现三种模式来实现这种通信: 1.委托delegation: 2.通知中心Notification Center: 3.键值观察key value observing,KVO 上面的三种模式是什么? 三种模式都是一个对象传递事件给另外一个对象,并且不要他们有耦合. 三种模式都是对象来通知某个事件发生了的方法,或者更准确的说,是允许其他的对象收到这种事件的方法.这对于

(转)NSNotification、delegate和KVO的区别

1.效率肯定是delegate比nsnotification高. 2. delegate方法比notification更加直接,最典型的特征是, KVO和NSNotification的区别: 和delegate一样,KVO和NSNotification的作用也是类与类之间的通信,与delegate不同的是1)这两个都是负责发出通知,剩下的事情就不管了,所以没有返回值:2)delegate只是一对一,而这两个可以一对多.这两者也有各自的特点. 1)KVO的使用: 被观察者发出  addObserv

iOS开发Delegate,Notification,Block使用心得

(一)简要介绍 1.Delegate(代理.委托) 代理几乎是iOS开发中最常用的传值方式,在项目中的AppDelegate就是使用的这种设计模式,不仅如此,还有很多原生的控件也使用的这种设计模式,比如:UITextFiled,UITableView等等.官方给出的解释如下: Delegation is a simple and powerful pattern in which one object in a program 1 acts on behalf of, or in coordin

GCD 以及设计模式

多线程编程 在 iOS 编程中,这几种情况下需要处理多线程:UI 事件必须在主线程里进行,其他的可以放在后台进行:而进行一些耗时长或阻塞线程的任务,最后放进后台线程里进行.iOS 的多线程技术有这么几种:线程,GCD 和 NSOperationQueue.线程这种技术比较复杂,而多线程编程向来是「复杂必死」,推荐尽可能使用后二者,但线程有个后二者没有的优势:能够精确保证任务执行的时间.GCD 全称是 Grand Central Dispatch, 是 libdispatch 这个库的外部代号,基

这些 iOS 面试基础题目,你都深入了解吗?

唐巧前辈说这些都是 iOS 的基础问题,应该对此深入的了解.当初看到时,大部分回答不上来,因为平时没有好好思考整理过.这里大部分的概念大多会在学习 OC 的过程中遇到过,但还是得经过写代码才能有更深的理解.反正我当初看那些设计模式是云里雾里,每个字都认识,就是不知道说的什么.即使现在,有些东西,我也不是很理解. Objective-C 底层 Objective-C runtime library:Objective-C 的对象模型,Block 的底层实现结构,消息发送,消息转发,category