我想知道从发布通知到收到通知需要多长时间。
原因是我想知道观察者模式是否适合我。我不希望另一个视图控制器可以在发送和处理通知之前更改该值。我担心另一个进程(线程?)更快,并且值不会被覆盖。
答案 0 :(得分:4)
通知中心同步传递消息,这意味着在注册接收通知的所有对象处理完通知之前,postNotification:
方法不会返回。换句话说,您可以将其视为在发布通知和接收通知之间花时间。
还有一些额外的事情你需要注意:
通知在发布它们的同一个线程上收到。如果使用performSelectorOnMainThread:withObject:waitUntilDone:
将通知移至主线程,则可以在waitUntilDone
设置为NO
时中断同步行为。如果waitUntilDone
设置为YES
,则传递通知的线程将阻塞,直到主线程完成执行指定的操作。
无法保证其观察员收到通知的顺序。如果单个通知有多个观察者,请不要依赖那些以任何特定顺序接收通知的观察者。
鉴于上述情况,并且知道哪个线程在您的应用程序中发布通知以及哪个线程需要处理它们,您应该能够确定观察者模式是否适合您。
答案 1 :(得分:0)
您可以使用enqueueNotification对通知处理进行更精细的控制,但最后我相信您可能会遇到与您无关的NotificationCenter实施所表达的相同问题