什么是NSNotification中心?为什么用它? (iPhone SDK)

时间:2010-09-23 12:33:54

标签: iphone

  

可能重复:
  What is NSNotification?

什么是NSNotification Center?为什么用它? (iPhone SDK)

1 个答案:

答案 0 :(得分:11)

它是以通用方式实现观察者模式的工具。您的对象可以说,“如果其他对象发布通知,我希望收到通知,以便我可以做某事。”另一个对象可以说,“发生了一些有趣的事情,所以我是发布此通知以让其他人知道。“

在Java等其他API中,您显式注册为管理器对象的观察者。 NSNotificationCenter使这不必要(尽管你仍然可以用这种方式实现模式)。

主要思想是解耦。这意味着对象应该尽可能少地了解彼此。 NSNotificationCenter是一个非常有价值的工具。在我真正知道如何使用它之前,我的类有很多委托,有时甚至是协议和注册方法,因此观察者可以自己注册。很难做对。 NSNotificationCenter可以免除您的负担。

一个具体的例子:假设你有一个想知道应用何时终止的对象。应用程序委托有一个在这种情况下被调用的方法applicationWillTerminate:。您现在可以修改委托,以便您的对象可以向委托注册,并实现applicationWillTerminate:方法,以便注册的对象具有一个名为。

的方法。

或者你这样做:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(aMethodOnMyObject)
                                             name:NSApplicationWillTerminateNotification
                                           object:nil];

然后您甚至不需要触摸您的应用程序代表。

更酷的是使用addObserverForName:object:queue:usingBlock:的块。

只是为了避免崩溃:如果您将对象注册为观察者,请务必使用removeObserver:方法调用NSNotificationCenter的dealloc方法。

我建议你也阅读NSNotificationCenter class reference中的说明,它也解释了如何使用它。学会使用它,试验它,我打赌你会发现它有时会节省很多代码。