博客> NSNotificationcerter 观察者默认为同步的,特别场景需要单独处理
NSNotificationcerter 观察者默认为同步的,特别场景需要单独处理
2017-10-19 07:38 评论:0 阅读:128 李方建
小技巧

NSNotificationcerter 观察者在通知事件处理完成以后(假设我们休眠5秒),抛出者才会往下继续执行,也就是说这个过程默认是同步的;当发送通知时,通知中心会一直等待所有的observer都收到并且处理了通知才会返回到poster;

异步处理: 方法一: 让通知事件处理方法在子线程中执行,例如: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    sleep(5);  

});  

方法二:

您可以通过NSNotificationQueue的enqueueNotification:postingStyle:和enqueueNotification:postingStyle:coalesceMask:forModes:方法将通告放入队列,实现异步发送,在把通告放入队列之后,这些方法会立即将控制权返回给调用对象。

NSNotification *notification = [NSNotification notificationWithName:kNotificationName
object:@"object"];
[[NSNotificationQueue defaultQueue] enqueueNotification:notification
postingStyle:NSPostASAP];

// [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationName object:@"object"];

收藏
0
sina weixin mail 回到顶部