授权和通知之间的重大区别

Mic*_*l Z 2 cocoa design-patterns

我正在阅读Cocoa Fundamentals-> Design Patterns-> Observer - > Uses and Limitations.它提到了一个让我感到困惑的" 与授权的重大区别 ":

但接收通知的对象只能在事件发生后作出反应.这与授权有显着差异.委托人有机会拒绝或修改委托对象提议的操作.另一方面,观察对象不能直接影响即将发生的操作.

特别是在委托上有机会拒绝或修改操作,而观察对象却不能.

Pét*_*rök 25

委托意味着调用另一个对象来执行给定任务,因此它自然有机会影响该任务的结果.这就像你的朋友要求你今晚购买2张电影票 - 你有话要去哪里,看什么电影,甚至可能建议邀请更多的朋友或去音乐会.

通知仅执行任务发生,因此通知对象不能再更改事件.这就像你的朋友说"我今晚8点在宫廷电影院有2张阿凡达门票,你想来吗?".


Dav*_*ong 7

@Péter的答案绝对正确.我想补充一点信息:

  • 一个对象只能有一个委托.但是,许多对象可以侦听来自单个对象的通知.通知被"广播"到整个应用程序,任何想要听取通知并对其做出反应的人都可以.
  • 委托方法可以具有返回值.换句话说,他们可以返回除了以外的一些价值(void).通知方法不能返回任何对象,因为他们没有对象返回.
  • 委托方法立即被调用,而通知通常被延迟到通过运行循环的下一个循环.这意味着对象可以在继续之前使用其委托来立即检索信息.这是代表们如此有用的主要原因.您可以向他们询问相关信息,他们会立即回复.

  • 立即调度本地(非分布式)通知.引用:http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/ (2认同)