返回
NSNotificationCenter 通知中心高级教程,不止会用更要理解得透彻
IOS
2023-11-23 03:35:43
NSNotificationCenter 是 iOS 中用来进行消息传递的一种机制,它允许您在应用程序的不同部分之间发送和接收通知。通知中心可以实现跨类、跨线程的通信,是 iOS 开发中常用的消息传递工具。
NSNotificationCenter 的工作原理很简单:
- 创建一个通知中心对象。
- 将感兴趣的对象注册为观察者。
- 发布一个通知。
- 观察者收到通知并作出相应处理。
创建通知中心对象
创建一个通知中心对象非常简单,只需使用 [[NSNotificationCenter alloc] init]
即可。
NSNotificationCenter *notificationCenter = [[NSNotificationCenter alloc] init];
将感兴趣的对象注册为观察者
要使对象能够接收通知,必须先将其注册为观察者。可以使用 addObserver:selector:name:object:
方法来注册观察者。
第一个参数是观察者对象,即要接收通知的对象。
第二个参数是观察者方法,即当收到通知时要执行的方法。
第三个参数是通知名称,即要监听的通知类型。
第四个参数是发送通知的对象,可以为 nil
,表示监听所有对象的通知。
[notificationCenter addObserver:self selector:@selector(handleNotification:) name:@"MyNotification" object:nil];
发布一个通知
要发布一个通知,可以使用 postNotificationName:object:userInfo:
方法。
第一个参数是通知名称,即要发布的通知类型。
第二个参数是通知对象,可以为 nil
。
第三个参数是通知携带的信息,可以为 nil
。
[notificationCenter postNotificationName:@"MyNotification" object:self userInfo:nil];
观察者收到通知并作出相应处理
当观察者收到通知时,会调用其注册的观察者方法。观察者方法的参数是 NSNotification
对象,其中包含了通知的名称、对象和携带的信息。
- (void)handleNotification:(NSNotification *)notification {
// Do something with the notification.
}
移除观察者
当观察者不再需要接收通知时,可以使用 removeObserver:
方法来移除观察者。
[notificationCenter removeObserver:self];
通知中心的使用场景
NSNotificationCenter 可以用于各种各样的场景,例如:
- 跨类通信:当两个类需要通信时,可以使用通知中心来发送和接收通知。
- 跨线程通信:当两个线程需要通信时,可以使用通知中心来发送和接收通知。
- 发布事件:当应用程序中发生某个事件时,可以使用通知中心来发布事件,以便其他对象能够作出相应处理。
通知中心的使用注意事项
在使用通知中心时,需要注意以下几点:
- 避免滥用通知中心:通知中心不应被滥用,只应在需要跨类或跨线程通信时使用。
- 避免使用过于通用的通知名称:通知名称应尽量具体,以避免其他对象意外收到不相关