代理、nsnotification和kvo的区别和用法
来源:互联网 发布:sql 排序后加上序号 编辑:程序博客网 时间:2024/05/16 18:31
个人在网上浏览一些文档发现蛮有意思的,现转载下来供大家学习查看。
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
多了发送通知的一步,但是其优点是监听不局限于属性的变化,还可以对多种多样的状态变化进行监听,监听范围广,使用也更灵活。
原文地址:http://www.zybang.com/question/7de351204a7e746dfafe75ec083b4b78.html
- 代理、nsnotification和kvo的区别和用法
- 代理,KVO和NSNotification的区别
- KVO和NSNotification的区别
- NSNotification和KVO的区别
- 5. NSNotification和KVO的区别和用法是什么?
- NSNotification、delegate和KVO的区别
- NSNotification、delegate和KVO的区别
- NSNotification、delegate和KVO的区别
- NSNotification、delegate和KVO的区别
- NSNotification、delegate和KVO的区别
- NSNotification、delegate和KVO的区别
- NSNotification、delegate和KVO的区别
- NSNotification、delegate和KVO的区别
- NSNotification、delegate和KVO的区别
- NSNotification、delegate和KVO的区别
- NSNotification、delegate和KVO的区别
- NSNotification、delegate和KVO的区别
- NSNotification、delegate和KVO的区别
- C#一次性向数据库插入上万条数据的方法
- js获取<s:select>正在显示的值
- 跟我一起写 Makefile(十二)
- html5新特性
- 转载 注解@PostConstruct与@PreDestroy讲解及实例 - 云淡风轻、仅此一抹 - 博客频道 - CSDN.NET http://blog.csdn.net/yaerfeng/art
- 代理、nsnotification和kvo的区别和用法
- UILabel使用不同的大小和字体、颜色
- JAVA发送邮件代码
- mybatis 使用经验小结,batch批量提交大量数据
- 栈的数组实现
- Apache Thrift之java入门例子
- 跟我一起写 Makefile(十三)
- 密码加密
- 前端移动端页面开发