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