观察 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 方法。