观察 NSObject 子类的属性
默认情况下,所有 NSObject 子类都已实现了大多数 KVO 和 KVC 功能。
要开始观察名为 personObject 的对象的名为 firstName 的属性,请在观察类中执行此操作:
[personObject addObserver:self
forKeyPath:@"firstName"
options:NSKeyValueObservingOptionNew
context:nil];
然后,只要观察到的密钥路径发生变化,上述代码中的 self 所引用的对象就会收到 observeValueForKeyPath:ofObject:change:context:消息。
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSString *,id> *)change
context:(void *)context
{
NSLog(@"new value of %@ is: %@", keyPath, change[NSKeyValueChangeNewKey]);
}
关键路径是 KVC 术语。NSObject 子类默认实现 KVC 功能。
@"firstName" 密钥路径可以访问名为 _firstName 的实例变量。
当访问 @"firstName" 密钥路径时,将调用名为 firstName 的 getter 方法,无论是否存在 _firstName 实例变量或 setFirstName setter 方法。