1

我想使用 cpp 函数作为观察者回调。在 CFNotificationCenterGet DarwinNotify/Distributed/Local Center 中,CFNotificationCenterGetLocalCenter 似乎最接近 [NSNotificationCenter defaultCenter]。

CFNotificationCenterGetLocalCenter 是否等同于 [NSNotificationCenter defaultCenter]?

编辑:我很怀疑,因为这里的答案说 - 你不能通过 C++ 类添加观察者但是这里说 - 你可以通过 CF 函数在 C++ 类中添加观察者。

4

2 回答 2

1

将 C++ 回调用于通知的最佳方式可能是-[NSNotificationCenter addObserverForName:object:queue:usingBlock:]与 C++ 代码的小粘合块一起使用。

于 2013-06-15T12:31:13.083 回答
0

NSNotificationCenter 和 CFNotificationCenter不是免费桥接的(请参阅:免费桥接类型的确定列表),因此如果您尝试接收 AppKit 在返回的特定 NSNotificationCenter 实例上发布的通知,使用 Objective-C+[NSNotificationCenter defaultCenter]似乎是最安全的,至少要与 NSNotificationCenter 的那个实例进行交互。您的 Objective-C 类可能非常薄,只需调用您的 C++ 类,但如果这些是您希望接收的特定通知,则无法避免使用 Objective-C。

编辑:根据经验,是的,根据您复制和粘贴的评论,向一个人发布通知似乎会导致另一个人收到通知。也就是说,我在CFNotificationCenter 参考页面NSNotificationCenter 参考页面上都没有看到任何关于这种行为的提及,在通知编程指南中似乎也没有提及,因此依赖这种未记录的实现细节似乎是有风险的。

于 2013-06-15T11:36:00.200 回答