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