【问题标题】:NSNotificationCenter: How long does it take to perform an operationNSNotificationCenter:执行一次操作需要多长时间
【发布时间】:2011-05-02 12:55:20
【问题描述】:

我想知道从发布通知到收到通知需要多长时间。

原因是我想了解观察者模式是否适合我。我不希望另一个视图控制器可以在通知发送和处理之前更改值。恐怕另一个进程(线程?)更快,并且值会在不应该被覆盖时被覆盖。

【问题讨论】:

    标签: iphone objective-c cocoa-touch observer-pattern nsnotifications


    【解决方案1】:

    通知中心同步传递消息,这意味着postNotification:方法在所有注册接收通知的对象都处理完通知后才会返回。换句话说,您可以认为它在发布通知和接收通知之间没有任何时间。

    您需要注意一些额外的事项:

    在发布通知的同一线程中收到通知。如果您使用performSelectorOnMainThread:withObject:waitUntilDone: 将通知移至主线程,如果waitUntilDone 设置为NO,您可以中断同步行为。如果waitUntilDone 设置为YES,则传递通知的线程将阻塞,直到主线程执行完指定操作。

    无法保证观察者收到通知的顺序。如果一个通知有多个观察者,不要依赖这些观察者以任何特定顺序接收通知。

    鉴于上述情况,并且知道哪个线程在您的应用程序中发布通知以及哪个线程需要处理它们,您应该能够确定观察者模式是否适合您。

    【讨论】:

    • 根据您的信息,我应该使用观察者模式。我只有一个线程(主线程),并且只有一个观察者(如果传递的线程阻塞了其他操作)。
    • 这听起来对我来说是正确的。如果您只有一个观察者,并且通知在主线程上发布和处理,那将是最简单的。如果您还没有创建任何其他访问该值的线程,那么您应该没有任何问题。
    【解决方案2】:

    您可以使用enqueueNotification 对通知的处理进行更细粒度的控制,但最终我相信无论是否实现 NotificationCenter,您都会遇到同样的问题

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 2021-06-08
      • 2023-03-16
      • 2018-12-07
      相关资源
      最近更新 更多