Я прочитал много документов о KVO, но я все еще смущен тем, когда его использовать.
В случае, если objA
хочет контролировать определенное свойство objB
, например:
self.objB = [[ObjB alloc] init];
[self.objB addObserver:self
forKeyPath:@"address"
options:0
context:nil];
поэтому если свойство objB
изменяется, и его можно изменить только на 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];
}
}
Это может быть полезно при использовании с singleton, например self.objB = [ObjB sharedInstance]
, где свойства могут быть изменены другими объектами. Это единственный вариант использования?