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