我知道可能没有正确答案,但我很想知道人们对这个问题的看法,或者是否有以下方法的利弊。第一个示例在主线程上调度通知,第二个示例在主线程中处理通知。如果您选择两种方法中的一种,哪一种和为什么?
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元素,那么在主线程上发送通知是有意义的。但是,如果有多个通知帖子网站,那么这就成了一个容易出错的问题。我宁愿发送到通知处理程序中的主线程,这样每个处理程序都可以完全控制它。
感谢您提供的任何反馈。
答案 0 :(得分:4)
我更喜欢第二种方法,即发件人也使用当前执行上下文。这更有效率。应避免在主线程上进行不必要的调度。但应该清楚地记录下来。
另一方面,接收器是唯一知道其代码是否存在关于执行上下文的约束的实例。也就是说,如果没有,它可以只使用当前的执行上下文。否则,它应该调度到代码所需的任何线程/队列。
所以,我们当然同意;)
答案 1 :(得分:0)
使用modern block-based syntax添加通知观察器,这允许您指定在收到通知时要运行的代码的队列。
在侦听器端指定是要走的路 - 您可以在任何线程上的任何地方发布通知。只有侦听器才知道运行什么线程代码是否重要。
答案 2 :(得分:-3)
发布通知将同步。请保持代码简单。