面试题答案
一键面试- 注册观察:
在需要监听属性变化的类中,使用
addObserver:forKeyPath:options:context:
方法注册观察。例如:
[self addObserver:self
forKeyPath:@"name"
options:NSKeyValueObservingOptionNew
context:nil];
这里 self
是观察者对象,@"name"
是要观察的属性的键路径,NSKeyValueObservingOptionNew
表示当属性值改变时获取新值,context
一般设为 nil
。
- 实现观察方法:
在观察者类中实现
observeValueForKeyPath:ofObject:change:context:
方法,当被观察属性值发生变化时,该方法会被调用。
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSKeyValueChangeKey,id> *)change
context:(void *)context {
if ([keyPath isEqualToString:@"name"]) {
id newValue = change[NSKeyValueChangeNewKey];
NSLog(@"The new value of name is: %@", newValue);
}
}
- 移除观察:
在不需要监听时,要使用
removeObserver:forKeyPath:
方法移除观察,通常在dealloc
方法中进行。
- (void)dealloc {
[self removeObserver:self forKeyPath:@"name"];
}