现在的位置: 首页 > 综合 > 正文

设计模式—通知

2013年08月09日 ⁄ 综合 ⁄ 共 1262字 ⁄ 字号 评论关闭

转自 : http://mfvan.blog.163.com/blog/static/58895190201132024136497/

2011-04-21 15:39:34|  分类: IOS/OBJ-C|字号 订阅


Cocoa 的NSNotification类的实例封装了要广播的消息,有兴趣接收信息的对象将利用Cocoa 的NSNotificationCenter类的实例注册它们自己。注册的对象称为观察者。

当将一条通知发送到通知中心时,通知中心会把该通知分发给合适的观察者。单个通知可能被广播给任意数量的观察者,把消息发送到通知中心的对象不需要知道有哪些观察者存在,或者有多少个观者者最终会接收到通知。类似的,观察者不一定需要知道通知来源于何处。
当匿名对象需要被动地观察和反应重要事件时,可以使用通知模式。与之相反,当匿名对象需要主动地影响所发生的事件时,可以使用委托模式。

- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName
object:(id)anObject;


第一个参数是要注册的观察者。第二个参数是一个选择器,用于确定在发布合适的通知时要发送给观察者的objective-c消息,选择器必须指定一个接收参数的方法,并且该参数必须是一个指向通知实例的指针。第三个和第四个参数aName:和 anObject:确定了观察者有兴趣接收哪些通知。

只有其名称与指定名称匹配的通知才会被传送给注册的观察者。


同步通知和异步通知

发布通知给NSNotificationCenter是同步的,这意味着当利用- (void)postNotification:(NSNotification*)notification;或者任何相关的NSNotificationCenter方法发布通知时,在postNotification:返回对你的代码控制之前将把通知传送给所有合适的注册观察者。同步行为也意味着在你实现方法对通知做出反应时,应该留意后果。如果在通知处理代码中执行过长的操作,就会延迟其他对象对通知的接收,以及延迟返回到发布通知的代码。


一种用于启动复杂的处理以响应通知的常见技巧是使用延迟执行。在通知处理代码中,预定将来的消息并立即返回。


当你需要比仅仅延迟消息更复杂的异步行为时,可以使用Cocoa的NSNotificationQueue类。NSNotificationQueue

实例实现了一个异步先进先出的队列。

在调用 

– enqueueNotification:postingStyle:coalesceMask:forModes:

时,将把指定的通知放在队列尾部,并把控制返回给调用者。基于postingStyle,coalesceMask and modes的值,在以后某个时间NSNotificationQueue把通知发布给NSNotificationCenter,从那一刻起,由NSNotificationCenter同步地处理通知。

抱歉!评论已关闭.