Objective-c KVO:object vs changeDictionary

Posted

技术标签:

【中文标题】Objective-c KVO:object vs changeDictionary【英文标题】:Objective-c KVO: object vs changeDictionary 【发布时间】:2012-01-26 22:27:57 【问题描述】:

我在 ios 应用程序中使用 KVO 在对象的属性发生更改时通知 viewController。当我添加观察者时,我指定options:NSKeyValueObservingOptionNew

observeValueForKeyPath 中,我可以通过两种方式获取属性的值:从传递给observeValueForKeyPath 的对象中获取。或者来自传递给同一方法的NSDictionary

这两种获取更新属性值的方法是否总是返回相同的结果?

回想一下,我在添加观察者时将NSKeyValueObservingOptionNew 指定为选项。从Apple's docs 看来,指定NSKeyValueObservingOptionInitial 可能会产生差异。

【问题讨论】:

【参考方案1】:

在常见的情况下,是的,这些对象应该是相同的,尽管可以设计一个它们不是的场景(即,在每次调用时生成新值的自定义 getter,或类似的东西。 ) NSKeyValueObservingOptionInitial 不会对该字典的内容产生任何影响,它只是确定是否立即通知观察者,还是在添加观察者后等待第一个值更改。如果您需要观察者中的某些状态被“启动”,这将非常有用。

【讨论】:

以上是关于Objective-c KVO:object vs changeDictionary的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C 变量...指向它自己?

转:KVC与KVO机制

iOS开发系列--Objective-C 之 KVCKVO

Objective-C Associated Objects 初识

Objective-C:断言 vs. 异常 vs. 错误

KVO的实现原理