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