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