- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
<分区>
Possible Duplicate:
Receiving 2 KVO notifications for a single KVC change
我对应该在哪里使用 willChangeValueForKey:
and didChangeValueForKey:
感到困惑.
我有一个对象,其属性需要自定义 setter 方法。根据 the Apple documentation , 我正在使用 will/didChangeValueForKey:
:
To implement manual observer notification, you invoke willChangeValueForKey: before changing the value, and didChangeValueForKey: after changing the value. The example in Listing 3 implements manual notifications for the openingBalance property.
Listing 3 Example accessor method implementing manual notification
- (void)setOpeningBalance:(double)theBalance {
[self willChangeValueForKey:@"openingBalance"];
_openingBalance = theBalance;
[self didChangeValueForKey:@"openingBalance"];
}
这使我的对象看起来像下面这样:
@interface cObject
@property (readwrite, nonatomic) BOOL Property;
@end
@implementation cObject
- (void)setProperty:(BOOL)Property
{
[self willChangeValueForKey:@"Property"];
_Property = Property;
[self didChangeValueForKey:@"Property"];
//Do some other stuff
}
@end
我困惑的根源在于,如果我设置另一个对象来观察 cObject
实例上的 Property
,然后调用 [myObject setProperty:]
,我的观察者的回调函数被点击了两次。查看堆栈:第一次命中是我调用 didChangeValueForKey:
的结果,第二次命中是我调用 setProperty:
的直接结果(即我的自定义 setter不会出现在堆栈中)。
为了进一步增加困惑,如果我在 cObject
的其他地方的另一个函数中更改 _Property
,我的观察者将不会收到通知(除非我使用 did/willChangeValueForKey:
,当然!)。
编辑:即使我没有在我的自定义 setter 中更改 _Property
,KVO 也会通知我的观察者它已更改。由此,我得出结论,KVO 被调用只是因为我调用了 setter,无论是否有任何变化......
谁能解释我的情况与文档中解释的情况有何不同?
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: Receiving 2 KVO notifications for a single KVC change 我
我是一名优秀的程序员,十分优秀!