在ios开发中,我们会经常遇到需要在页面A和页面B之间通信的需求,这一需求我们可以用Block、协议、通知等方法实现。今天谈谈通知的用法。
有人会问,既然以上几种方式都可以实现这一需求,那么为什么要用通知呢?
这就要谈到NSNotification的特点
- 可以实现一对多,NSNotification 的实际是一种观察者模式。
每一个ios程序都有着唯一的一个通知中心,我们使用时通过[NSNotificationCenter defaultCenter]
获取。而它的运行其实相当于一个广播站。
在使用中,我们只需要两步。
- 发通知
- 收通知
其中,我们需要在要接通知的类中注册观察者
NSNotificationCenter * center = [NSNotificationCenter defaultCenter];
//添加当前类对象为一个观察者,name和object设置为nil,表示接收一切通知
[center addObserver:self selector:@selector(yourMethod) name:@"yourName" object:nil];
其中@selector(yourMethod)
为接收到通知所会执行的方法,name
为通知的名称,设置后此通知中心只会接收通知名为'name'的通知,同理object
object为通知所带参数对象的类
此后,在需要发送通知的地方,我们只需要创建一个NSNotification实例,并将通知发送出去即可。
NSNotification * notice = [NSNotification notificationWithName:@"name of notification" object:nil userInfo:@{@"1":@"123"}];
//发送消息
[[NSNotificationCenter defaultCenter]postNotification:notice];
我们可以在object和userInfo中添加自己所需要传递的参数,若不用,则设为nil。其中,我们在接收通知的方法中,通过(NSNotification*)text; text.object
的方法来获取到传递的object对象的内容。
至此,通知的基础使用就说完了。需要记住的是,一个通知中心可以通过name和object参数来控制自己所能接到的通知,若都为nil,则可以接收到所有通知。所以,我们在使用过程中要注意控制通知的接收者。
Tino Wu
网友评论