1.效率:delegate比nsnotification高。
2. delegate方法比notification更加直接,最典型的特征是,delegate方法往往需要关注返回值, 也就是delegate方法的结果。比如-windowShouldClose:,需要关心返回的是yes还是no。所以delegate方法往往包含 should这个很传神的词。也就是好比你做我的delegate,我会问你我想关闭窗口你愿意吗?你需要给我一个答案,我根据你的答案来决定如何做下一 步。相反的,notification最大的特色就是不关心接受者的态度, 我只管把通告放出来,你接受不接受就是你的事情,同时我也不关心结果。所以notification往往用did这个词汇,比如 NSWindowDidResizeNotification,那么NSwindow对象放出这个notification后就什么都不管了也不会等待接 受者的反应。

简明概要的说明下KVO和NSNotification的区别:

和delegate一样,KVO和NSNotification的作用也是类与类之间的通信,与delegate不同的是

1)这两个都是负责发出通知,剩下的事情就不管了,所以没有返回值;

2)delegate只是一对一,而这两个可以一对多。这两者也有各自的特点。

1)KVO的使用:
  被观察者发出  addObserver:forKeyPath:options:context:  方法来添加观察者。
然后只要被观察者的keyPath值变化(注意:单纯改变其值不会调用此方法,只有通过getters和setters来改变值才会触发KVO),就会在观察者里调用方法

observeValueForKeyPath:ofObject:change:context:

  因此观察者需要实现方法 observeValueForKeyPath:ofObject:change:context: 来对KVO发出的通知做出响应。
  这 些代码都只需在观察者里进行实现,被观察者不用添加任何代码,所以谁要监听谁注册,然后对响应进行处理即可,使得观察者与被观察者完全解耦,运用很灵活很 简便;但是KVO只能检测类中的属性,并且属性名都是通过NSString来查找,编译器不会帮你检错和补全,纯手敲所以比较容易出错。

2)NSNotification的使用
  这里的通知不是由被观察者发出,而是由NSNotificationCenter来统一发出,而不同通知通过唯一的通知标识名notificationName来区分,标识名由发送通知的类来起。
首先被观察者自己在必要的方法A里,通过方法postNotificationName:object:来发出通知notificationName这样发送通知者这边的工作就完成了,每次A被调用,就会发送一次通知notificationName。
然后谁要监听A的变化,就通过[NSNotificationCenter defaultCenter]的方法addObserver:selector:name:object:为观察者注册监听name为notificationName的通知然后每次发出name为notificationName的通知时,注册监听后的观察者就会调用其自己定义的方法notificationSelector来进行响应。
  NSNotification的特点呢,就是需要被观察者先主动发出通知,然后观察者注册监听后再来进行响应,比KVO多了发送通知的一步,但是其优点是监听不局限于属性的变化,还可以对多种多样的状态变化进行监听,监听范围广,使用也更灵活。

最新文章

  1. iOS 因为reason: 'Pushing the same view controller instance more than once is not supported而奔溃(上)
  2. Nodejs创建客户端
  3. net-snmp配置:snmp v3的安全配置
  4. [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map
  5. 【HDOJ】1542 Atlantis
  6. 解决php的$美元符号与Zen Coding冲突问题
  7. android EditText设置光标、边框和图标
  8. FileReader和BufferedReader的区别
  9. C#,COM口,接收,发送数据
  10. jQuery选择器(内容过滤选择器)第四节
  11. MySQL Group Relication 部署环境入门篇
  12. 20160220.CCPP体系详解(0030天)
  13. 力扣算法题—051N皇后问题
  14. 在模态框(Modal)中使用UEditor全屏显示的一个坑
  15. 【DWM1000】 code 解密1一 去掉Main 函数多余内容
  16. [No0000197]Windows用户都应该知道的运行命令
  17. Visual Studio中配置Beyond Compare为版本比较工具
  18. 知识图谱实战开发案例剖析-番外篇(1)- Neo4j是否支持按照边权重加粗和大数量展示
  19. Codeforces 801C - Voltage Keepsake
  20. SQL Server T—SQL 基本编程

热门文章

  1. Swift和C#的基本语法对比
  2. android--jenkins+gradle+android自动化构建apk步骤(转)
  3. Java实现 Base64、MD5、MAC、HMAC加密(转)
  4. PoolBoy
  5. 2012在数据库技术会议上的讲话PPT打包
  6. NHibernate框架魅力美
  7. Node.js v0.10.31API手冊-事件
  8. 打印到类阵列的给定序列的所有排列的n皇后问题
  9. 3.1、Eclipse
  10. hdu 3683 Gomoku (模拟、搜索)