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