0

我有一个NSObject监听约 30 个字符串信号的设备。我想向这个对象发布任意数量的字符串。但我首先想测试它是否在观察当前字符串。

的文档[NSNotificationCenter][1]并不表明这是可能的。只有添加/删除删除观察者和发布通知方法。

KVO 的文档让我认为使用该方法可以实现这一点[[NSNotificationCenter defaultCenter] observationInfo]。我不知道如何使用返回的void*. 文档说明了返回值:

一个指针,它标识有关向接收者注册的所有观察者的信息、在注册时使用的选项等。

我特别欣赏“等等”。那是最有帮助的部分……叹息。

考虑到对象正在处理的信号数量,我不想手动检查每个字符串。是否有一种优雅的方法来检查对象是否在不使用私有 API 的 NSObject 级别或 KVO 级别观察字符串(try/catch 不合格)?

谢谢。

4

1 回答 1

1

使用的-observationInfo指针对您来说是不透明的(即无意义的);这只是一个象征。从标题(强调我的):

获取或返回一个指针,该指针标识有关向接收者注册的所有观察者的信息、在注册时使用的选项等。这些方法的默认实现将观察信息存储在由接收者键​​入的全局字典中指针。为了提高性能,您可以覆盖这些方法以将不透明数据指针存储在实例变量中。这些方法的覆盖不得尝试将 Objective-C 消息发送到传入的观察信息,包括 -retain 和 -release。

此外,KVO 观察和 NSNotificationCenter 观察是两个完全独立的机制,它们之间没有任何关系。两者都没有提供任何公共 API 来确定谁在观察什么。我可以设想跟踪观察的唯一方法是覆盖添加/删除方法(使用 KVO 的方法覆盖或通过调整 NSNotificationCenter 上的方法),然后自己跟踪观察信息。

我并不是要成为“那个人”,而是想知道谁在观察什么通常是一个危险信号,即某些东西没有很好的架构。如果你担心性能,我不会。KVO 和 NSNotificationCenter 是相当快速/低开销的机制。大约 30 次观察对任何一个都没有影响。我不会担心的。

于 2013-06-21T11:34:27.680 回答