哪个更好,在主线程上调度NSNotification或在主线程上处理通知

时间:2014-09-24 06:13:05

标签: ios nsnotification

我知道可能没有正确答案,但我很想知道人们对这个问题的看法,或者是否有以下方法的利弊。第一个示例在主线程上调度通知,第二个示例在主线程中处理通知。如果您选择两种方法中的一种,哪一种和为什么?

dispatch_async(dispatch_get_main_queue(), ^{
   [[NSNotificationCenter defaultCenter] postNotificationName:@"notificationName"
                                                       object:nil];
}); 


- (void)handleNotification:(NSNotification *)notification {
   dispatch_async(dispatch_get_main_queue(), ^{
       [self updateUI];
   });
}

如果您知道某些处理程序需要处理UI元素,那么在主线程上发送通知是有意义的。但是,如果有多个通知帖子网站,那么这就成了一个容易出错的问题。我宁愿发送到通知处理程序中的主线程,这样每个处理程序都可以完全控制它。

感谢您提供的任何反馈。

3 个答案:

答案 0 :(得分:4)

我更喜欢第二种方法,即发件人也使用当前执行上下文。这更有效率。应避免在主线程上进行不必要的调度。但应该清楚地记录下来。

另一方面,接收器是唯一知道其代码是否存在关于执行上下文的约束的实例。也就是说,如果没有,它可以只使用当前的执行上下文。否则,它应该调度到代码所需的任何线程/队列。

所以,我们当然同意;)

答案 1 :(得分:0)

使用modern block-based syntax添加通知观察器,这允许您指定在收到通知时要运行的代码的队列。

在侦听器端指定是要走的路 - 您可以在任何线程上的任何地方发布通知。只有侦听器才知道运行什么线程代码是否重要。

答案 2 :(得分:-3)

发布通知将同步。请保持代码简单。