对象之间进行通信最基本的方式就是消息传递,在Cocoa中提供Notification Center机制来完成这一任务。其主要作用就是负责在任意两个对象之间进行通信。使用方法很简单,如下几个步骤即可:
假设A与B之间进行通信,B来触发事件,A接受该事件,并作出响应。
1) A编写自定义的消息响应函数update
2) A向消息中心注册,[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(update) name:@"update" object:nil]
3) B触发事件[[NSNotificationCenter defaultCenter] postNotificationName:@"update" object:nil]
每一个进程都有一个默认的NSNotificationCenter,可以通过类方法defaultCenter获取该消息中心的实例。消息中心可以处理同一进程中不同对象之间的消息。如果要在同一台机器上进行进程间的通信,需要使用NSDistributedNotificationCenter。
消息中心以同步的方式将消息分发到所有的观察者中,换言之,直到所有的观察者都收到消息并处理完毕以后,控制权才会回到调用者的手里。相当是windows SDK 里的sendMassage
它这个post动词有点过分,NND,从VS过渡IOS的还真有点伤不起啊!
当程序员们听到notification center的时候, 他们可能会联想到IPC(进程间通讯).他们认为:"我在一个程序中创建一个observer,然后在另外一个程序中发送一个notification". 这个设计没有办法工作的, notification
center允许同一个程序中的不同对象通许,它不能跨越不同的程序 [Notification 就是设计模 式中的 观察者模式, cocoa为我们实现了该模式, 就像Java也有同样的实现一样]
notification对象的object变量是poster,如果我们想要notification对象传递更多的信息,我们可以使用user info dictionary. 每个notification对象有一个变量叫 userInfo, 它是一个NSDictionary对象,用来存放用户希望随着notification一起传递到observer的其它信息
相当是sendMassage里的wparam与lparam也就是可以传递参数!
如果需要异步的处理消息,需要使用通知队列NSNotificationQueue。
在多线程程序中,通知会被分发到每一个发起消息的线程中,这可能与观察者注册时所在的线程已经不是同一线程。
本文介绍了Cocoa中的NotificationCenter机制,这是一种用于对象间通信的基本方式。文章详细解释了如何使用NotificationCenter进行消息传递,包括注册观察者、触发事件及传递额外信息的方法。此外还探讨了同步消息分发的特点以及如何实现异步处理。
5656

被折叠的 条评论
为什么被折叠?



