美文网首页
NSNotificationCenter是同步的?还是异步的?

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

作者: xbcoding | 来源:发表于2019-01-21 10:12 被阅读0次
    - (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不阻塞当前线程,可以根据实际情况,考虑将通知的发送放在子线程,或者将通知的处理方法放在子线程调用。

    相关文章

      网友评论

          本文标题:NSNotificationCenter是同步的?还是异步的?

          本文链接:https://www.haomeiwen.com/subject/yevqjqtx.html