objective-c - 我如何从 Objective C KVO 中的 observationInfo 方法获取信息?

标签 objective-c cocoa binding key-value-observing

observationInfo 方法返回对象的绑定(bind)信息。我环顾四周,但我不知道如何从字典中获取信息。任何人都可以引导我朝着正确的方向前进吗?

编辑 以防有人误解我的意思。我的类(class)已经全部符合 KVO 标准。现在,在将观察者添加到 something 对象后,self.something 现在将具有绑定(bind)信息。如果我做了 [self.something observationInfo],这将返回一个字典。我想访问该词典的内容。

苹果文档说

For improved performance, this method and setObservationInfo: can be overridden to store the opaque data pointer in an instance variable. Overrides of this method must not attempt to send Objective-C messages to the stored data, including retain and release.

所以我知道这是可以做到的..我的问题是怎么做?我在网上看不到任何信息。

最佳答案

我怀疑您误解了 -observationInfo/-setObservationInfo: 的用途。通过这些方法设置和获取的值对您来说是不透明的。换句话说,它的内容是系统框架私有(private)的,您不打算访问/解析它。您摘录的文档中的评论是:

For improved performance, this method and setObservationInfo: can be overridden to store the opaque data pointer in an instance variable. Overrides of this method must not attempt to send Objective-C messages to the stored data, including retain and release.

让我试着澄清一下这是什么意思:

对于每一次观察,框架都需要跟踪一些关于观察的私有(private)数据,以便稍后提供。它如何存储该信息没有记录,但从概念上讲,它可能存储在一个映射中,其中键是对象的指针值,值是这个不透明的数据结构。

在特定的、对性能敏感的情况下,可能是在该共享 map 中查找观察信息会显着影响性能(我自己从未见过这种情况出现在分析跟踪中,但这并不是说它不能'不会发生)。在这些情况下,最好将指针直接存储为对象中的实例变量,这会将获取操作从映射查找更改为简单的添加。从系统框架的角度来看,我敢打赌 map 查找成本通常远没有备选方案繁重(在大局中),后者为此目的将一个实例变量放入 NSObject (这将使 每个 对象大 8 个字节,无论它是否使用 KVO —— 看起来很简单。)

-observationInfo/-setObservationInfo: 存在以允许您进行优化。如果你实现了这个优化,这些方法也将是一种了解你的对象是否被观察的方法(即信息值是 nil 吗?)这可能允许你对你的对象进行其他更改行为。

如果您出于其他目的需要保留观察对象的列表以及它们正在观察的内容的详细信息,那么您将需要自己通过覆盖 addObserver:... 来完成和 removeObserver:...,并添加代码以维护您自己的数据私有(private)结构(同时仍调用 super。)

关于objective-c - 我如何从 Objective C KVO 中的 observationInfo 方法获取信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17598944/

相关文章:

ios - 弹出viewcontroller后重新加载TableView数据

objective-c - NSMutableArray : getObject method returning null

macos - 上下文菜单未调用 NSMenuDelegate 方法

wpf - 如何将按钮名称绑定(bind)到内容?

c# - XAML WPF 的绑定(bind)/引用方法

ios - 对于简单的POST请求,NSURLSession比NSURLConnection需要更长的时间

iphone - 自定义类上的 NSData?

ios - 将按钮和标签添加到 UICollectionView 单元格

macos - 如何以编程方式使标签(NSTextField)按内容自动调整大小?

javascript - Angular 6 - 更改变量但不刷新 View