Tôi đã đọc nhiều tài liệu trên KVO, nhưng tôi vẫn còn bối rối khi sử dụng nó.khi nào sử dụng KVO?
Trong trường hợp objA
muốn giám sát một tài sản nhất định objB
, như vậy:
self.objB = [[ObjB alloc] init];
[self.objB addObserver:self
forKeyPath:@"address"
options:0
context:nil];
vì vậy nếu thay đổi sở hữu objB
's, và nó chỉ có thể được thay đổi bằng cách self
, tại sao không chỉ làm điều này:
self.objB.property = @"newValue";
[self doSomethingBasedOnNewValueOfObjBnewProperty];
thay vì
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if(keyPath == @"address") {
[self doSomethingBasedOnNewValueOfObjBnewProperty];
}
}
Nó có thể hữu ích khi được sử dụng với một singleton, như self.objB = [ObjB sharedInstance]
, nơi các thuộc tính có thể được thay đổi bởi các đối tượng khác. Đây có phải là trường hợp sử dụng duy nhất không?