NSNotificationCenter是同步的?还是异步的?

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationAction:)
                                                 name:kNotificationName object:nil];
    
}
 
- (void) notificationAction: (NSNotification*)notification
{
    NSLog(@"sleep 之前");
    
    sleep(10);
    
    NSLog(@"sleep 之后");
    
}
 
- (void)buttonActon:(id)sender{
    [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationName object:nil];
    
    NSLog(@"buttonActon:");
}

// 打印顺序如下:
sleep 之前
sleep 之后
buttonActon:

结论:
(1)NSNotificationCenter 默认是同步的,在通知发出之后,观察者要处理完通知事件之后,通知的发送者才能继续往下执行。
(2)NSNotificationCenter 会一直等待所有的 观察者 都收到并且处理了通知才会返回到 通知发送者。
(3)如果想NSNotificationCenter不阻塞当前线程,可以根据实际情况,考虑将通知的发送放在子线程,或者将通知的处理方法放在子线程调用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,172评论 1 32
  • 引用自多线程编程指南应用程序里面多个线程的存在引发了多个执行线程安全访问资源的潜在问题。两个线程同时修改同一资源有...
    Mitchell阅读 2,038评论 1 7
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,419评论 11 349
  • NSNotificationCenter对象(通知中心)提供了在程序中广播消息的机制,它实质上就是一个通知分发表。...
    9de75b652cd9阅读 767评论 0 1
  • 第5章 多线程编程 5.1 线程基础 5.1.1 如何创建线程 在java要创建线程,一般有==两种方式==:1)...
    AndroidMaster阅读 1,825评论 0 11