对观察员的观察员观察员是否会发生任何变化?
问题描述:
让我做一个例子来说明这一点:对观察员的观察员观察员是否会发生任何变化?
我有一个类ClassA的,它包含一个公共成员memberA。 它还包含一个公共方法methodA,它将更改memberA的值。
现在我有ClassA的一个瞬间:
instantA
然后我把这个:
[instantA addObserver:anObserver forKeyPath:@"memberA" options:NSKeyValueObservingOptionNew context:NULL];
为什么这会触发观察员:
instantA.memberA = xxxxx;
但这不会:
[instantA methodA];
答
这是因为编译器为您的属性生成的合成方法与KVO兼容,但您的手动更改的方法可能不适用。
我猜你的方法是直接改变iVar,而不是通过属性?
举例来说,你这样做......
- (void)methodA
{
memberA = someValue;
}
或者是你这样做......
- (void)methodA
{
self.memberA = someValue;
}
后者将引发观察者,前者不会。您可以通过它遵循志愿使前者触发观察者......
- (void)methodA
{
[self willChangeValueForKey:@"memberA"];
memberA = someValue;
[self didChangeValueForKey:@"memberA"];
}
看到苹果的官方文档here对志愿遵守的更多信息。
谢谢你,你真棒! – CarmeloS