设计模式---通知

本文详细介绍了Cocoa中的NSNotification机制,包括NSNotification的实例如何封装消息,以及如何通过NSNotificationCenter进行观察者模式的注册与通知。还探讨了同步与异步通知的区别。

转自 : 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同步地处理通知。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值