A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Notification和delegate都可以在两个类之间传递消息,但是在效率和资源占用方面两者有优劣吗?什么时候用delegate,什么时候用Notification?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

5 个回复

倒序浏览
使用delegate参数更加直观,使用notification参数不那么直观,所以能使用delegate的地方,尽量使用delegate

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
Delegate:
消息的发送者(sender)告知接收者(receiver)某个事件将要发生,delegate同意然然后发送者响应事件,delegate机制使得接收者可以改变发送者的行为。通常发送者和接收者的关系是直接的一对多的关系。

Notification:
消息的发送者告知接收者事件已经发生或者将要发送,仅此而已,接收者并不能反过来影响发送者的行为。通常发送者和接收者的关系是间接的多对多关系。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
delegate一对多 效率高 notification 多对多 效率低
回复 使用道具 举报
1、Delegate是一种点对点的消息传送机制。传递给自己或者其他对象。有时候他还会返回一个影响事件如何被处理的值。
   举一个简单的Mac例子,NSWindow声明了有一个名叫windowShouldClose:的协议,当用户点窗口左上角的关闭按钮时,这个窗口对象就会发送一个windowShouldClose:消息给他的delegate,来询问这个窗口是否可以被关闭。这个delegate会返回一个boolean值,来控制窗口对象的这个(关闭)行为。
2、Notification是一种一对多的消息传递方式。他的实质是广播信息给所有observer。
消息发送者不需要知道谁是消息的接收者。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
Delegate是一种点对点的消息传送机制。传递给自己或者其他对象。有时候他还会返回一个影响事件如何被处理的值。
在内存管理环境中,delegate是弱引用。在垃圾回收环境中,delegate是强引用。

Notification是一种一对多的消息传递方式。他的实质是广播信息给所有observer。
消息发送者不需要知道谁是消息的接收者。
他减少了对象之间的依赖。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马