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