陈斌彬的技术博客

Stay foolish,stay hungry

通知的同步处理

通知的同步处理

@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,最后总结一些小建议:

  1. 在需要的地方使用通知。
  2. 注册的观察者在不使用时一定要记得移除,即添加和移除要配对出现。
  3. 尽可能迟地去注册一个观察者,并尽可能早将其移除,这样可以改善程序的性能。因为,每post一个通知,都会是遍历通知中心的分发表,确保通知发给每一个观察者。
  4. 记住通知的发送和处理是在同一个线程中。
  5. 使用-addObserverForName:object:queue:usingBlock:务必处理好内存问题,避免出现循环引用。
  6. NSNotificationCenter是线程安全的,但并不意味着在多线程环境中不需要关注线程安全问题。不恰当的使用仍然会引发线程问题。

Resource Reference

http://www.tuicool.com/articles/MNjamm