我已经阅读了很多关于 KVO 的文档,但我仍然对何时使用它感到困惑。
如果objA
想监视 的某个属性objB
,如下所示:
self.objB = [[ObjB alloc] init];
[self.objB addObserver:self
forKeyPath:@"address"
options:0
context:nil];
所以如果objB
's 的属性发生变化,并且只能由 改变self
,为什么不这样做:
self.objB.property = @"newValue";
[self doSomethingBasedOnNewValueOfObjBnewProperty];
代替
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if(keyPath == @"address") {
[self doSomethingBasedOnNewValueOfObjBnewProperty];
}
}
当与单例一起使用时,它可能很有用,例如self.objB = [ObjB sharedInstance]
,其中属性可能会被其他对象更改。这是唯一的用例吗?