通知的同步处理
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:TEST_NOTIFICATION object:nil];
[[NSNotificationCenter defaultCenter] postNotificationName:TEST_NOTIFICATION object:nil];
NSLog(@"continue");
}
- (void)handleNotification:(NSNotification *)notification
{
NSLog(@"handle notification");
}
@end
运行后输出结果是:
handle notification
continue
对于使用NSNotificationCenter,最后总结一些小建议:
- 在需要的地方使用通知。
- 注册的观察者在不使用时一定要记得移除,即添加和移除要配对出现。
- 尽可能迟地去注册一个观察者,并尽可能早将其移除,这样可以改善程序的性能。因为,每post一个通知,都会是遍历通知中心的分发表,确保通知发给每一个观察者。
- 记住通知的发送和处理是在同一个线程中。
- 使用-addObserverForName:object:queue:usingBlock:务必处理好内存问题,避免出现循环引用。
- NSNotificationCenter是线程安全的,但并不意味着在多线程环境中不需要关注线程安全问题。不恰当的使用仍然会引发线程问题。