cocoa - 何时创建自定义 NSNotificationCenter?

标签 cocoa nsnotificationcenter

我一直在研究 NSNotificationCenter,我一直想知道您什么时候会使用自己的自定义通知中心而不是 defaultCenter?这样做的好处是什么?

请原谅我的无知,但似乎仅使用 defaultCenter 就可以很愉快地相处,但我想确保我没有错过一些重要的东西。

最佳答案

Apple 文档含糊不清,它只是指出程序员通常不需要创建新文档:

Each running Cocoa program has a default notification center. You typically don’t create your own. An NSNotificationCenter object can deliver notifications only within a single program.

完整来源:NSNotificationCenter documentation .

但是,每个通知中心都可以处理按名称和对象区分的通知网络。当您添加观察者时,您通常会以如下方式调用该方法:

[center addObserver: self selector: @selector(observe:) name: @"observe" object: someObject];

当您发布通知时,您可以指定对象:

[center postNotificationName: @"observe" object: someObject];

这样说你使用N个名字和M个对象,你可以处理N*M个区分通知。我认为没有必要使用两个通知中心。理论上,如果您完成了所有名称,您可以使用 alloc+init 创建另一个名称,但我几乎看不出它实际上如何变得方便。

还要考虑到,当有两个对象不拥有指向彼此的直接指针时,通常会使用通知中心(否则为什么不简单地调用它的方法?),因为可以避免复杂的绑定(bind)(特别是当您使用很多 xib 文件),因此拥有一个独特的通知中心对象非常方便。

如果您使用通过allot+init获得的通知中心,那么您必须确保所有通信对象都有指向该通知中心的指针,这会增加一些复杂性。所有通知中心的电量都会被浪费。

关于cocoa - 何时创建自定义 NSNotificationCenter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17047416/

相关文章:

cocoa - 如何将 NSCIImageRep 绘制到 NSView

ios - 关闭 ViewController 时如何在 Monotouch iOS 应用程序中删除观察者

swift - 在 Swift Struct 中删除NotificationCenter Observer的最佳位置

multithreading - 使用performSelectorInBackground在单独的线程中处理代码时更新cocoa接口(interface)

objective-c - 如何检测某些字符是否位于 NSString 的末尾?

objective-c - 覆盖窗口关闭行为

objective-c - 应用程序将终止 : NSNotificationCenter vs Application Delegate

xcode - 单元测试始终为 "successful"

iphone - 添加观察者:名称

ios - KVO和NSNotificationCenter的正确用法和区别是什么?