返回

NSNotificationCenter 通知中心高级教程,不止会用更要理解得透彻

IOS

NSNotificationCenter 是 iOS 中用来进行消息传递的一种机制,它允许您在应用程序的不同部分之间发送和接收通知。通知中心可以实现跨类、跨线程的通信,是 iOS 开发中常用的消息传递工具。

NSNotificationCenter 的工作原理很简单:

  1. 创建一个通知中心对象。
  2. 将感兴趣的对象注册为观察者。
  3. 发布一个通知。
  4. 观察者收到通知并作出相应处理。

创建通知中心对象

创建一个通知中心对象非常简单,只需使用 [[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 可以用于各种各样的场景,例如:

  • 跨类通信:当两个类需要通信时,可以使用通知中心来发送和接收通知。
  • 跨线程通信:当两个线程需要通信时,可以使用通知中心来发送和接收通知。
  • 发布事件:当应用程序中发生某个事件时,可以使用通知中心来发布事件,以便其他对象能够作出相应处理。

通知中心的使用注意事项

在使用通知中心时,需要注意以下几点:

  • 避免滥用通知中心:通知中心不应被滥用,只应在需要跨类或跨线程通信时使用。
  • 避免使用过于通用的通知名称:通知名称应尽量具体,以避免其他对象意外收到不相关