controllers间通信-delegate、Notification、KVO比较
来源:互联网 发布:保护java源代码的程序 编辑:程序博客网 时间:2024/06/07 10:16
在不过分耦合的前提下,controllers间怎么进行通信。在IOS应用不断的出现三种模式来实现这种通信:
1.委托delegate;
2.通知中心Notification Center;
3.键值观察key value observing,KVO
delegate
优势
1.要委托的事件要在delegate协议中有定义
2.如果delegate中的方法没有实现,就会出现编译警告
3.协议在Controller的作用域范围内定义
4.在一个应用中可以控制和跟踪
5.在一个控制器中可以定义多个不同的delegate
6.能够接受调用的协议方法的返回值,
缺点
1.需要定义很多代码,定义协议,在委托者中定义委托方法,设置被委托者的delegate
2.在释放代理对象时,需要小心的将delegate改为nil。一旦设定失败,那么调用释放对象的方法将会出现内存crash
3.在一个controller中有多个delegate对象,并且delegate是遵守同一个协议,但还是很难告诉多个对象同一个事件,不过有可能。
Notification
优势
1.不需要写很多代码,实现比较简单
2.发出一个通知,多个对象能够接受,即实现了一对多的实现简单
3.controller能够传递context对象(dictionary),context对象携带了关于发送通知的自定义的信息
缺点
1.观察者需要提前知道通知的名称、UserInfo dictionary keys等信息
2.通知发出后,不能从观察者获得反馈信息
3.在编译器不会检查通知是否能够被观察者正确的处理
4.调试时,难以跟踪和控制
KVO
优势
1.能够提供一种简单的方法实现两个对象的同步,例如model和view之间的同步
2.能够观察属性的最新值以及旧值,可以使用key paths观察嵌套对象
3.能够对非我们创建的对象,即内部对象的状态改变作出响应,而且不需要改变内部对象(SKD对象)的实现;
缺点:
1.我们观察的属性必须使用strings来定义。因此在编译器不会出现警告以及检查;
2.对属性重构将导致我们的观察代码不再可用;
在这三种模式中,我认为KVO有最清晰的使用案例,而且针对某个需求有清晰的实用性。而另外两种模式有比较相似的用处,并且经常用来给controller间进行通信。那么我们在什么情况使用其中之一呢?
根据我开发iOS应用的经历,我发现有些过分的使用通知模式。我个人不是很喜欢使用通知中心。我发现用通知中心很难把握应用的执行流程。UserInfo dictionaries的keys到处传递导致失去了同步,而且在公共空间需要定义太多的常量。对于一个工作于现有的项目的开发者来说,如果过分的使用通知中心,那么很难理解应用的流程。
我觉得使用命名规则好的协议和协议方法定义对于清晰的理解controllers间的通信是很容易的。努力的定义这些协议方法将增强代码的可读性,以及更好的跟踪你的app。代理协议发生改变以及实现都可通过编译器检查出来,如果没有将会在开发的过程中至少会出现crash,而不仅仅是让一些事情异常工作。甚至在同一事件通知多控制器的场景中,只要你的应用在controller层次有着良好的结构,消息将在该层次上传递。该层次能够向后传递直至让所有需要知道事件的controllers都知道。
参考:http://blog.csdn.net/dqjyong/article/details/7685933
- controllers间通信-delegate、Notification、KVO比较
- delegate,notification,kvo比较
- Delegate,Notification,KVO
- Delegate,Notification,KVO
- Delegate,Notification,KVO
- delegate、notification和KVO
- Delegate, Notification,KVO优缺点
- Delegate Notification KVO 整理
- delegate, notification和kvo模式实现通信的优缺点
- delegate,notification,KVO三种模式实现通信的优缺点
- delegate , Notification , protocal , KVC , KVO
- 如何选择delegate、notification、KVO
- 如何选择delegate、notification、KVO
- 如何选择delegate、notification、KVO?
- KVO KVC Notification Delegate Block
- Delegate,notification,KVO的区别
- delegate、notification、KVO各优缺点
- 页面传值--Delegate/Block/KVO/Notification
- 树-234树
- SpringMVC入门之七:使用JSP作为视图
- Android守护进程
- 【Python】学习笔记——-8.6、面向对象高级编程:6.使用元类
- CocoaPods pod install/pod update更新慢的问题
- controllers间通信-delegate、Notification、KVO比较
- bat语句寻找遍历文件夹
- vs2013建立一个登陆界面后点击按钮调出另外一个界面
- linux 内核面试问题
- 熟练的Java程序员应该掌握哪些技术?
- Android APP杀不死(最大存活方法)
- web监听获得滚动值
- 今天第一次注册使用blog
- java 蓝桥杯 泊松分酒