面试题答案
一键面试基本语法步骤:
- 注册观察者:在需要观察属性变化的对象中,使用
addObserver:forKeyPath:options:context:
方法注册观察者。例如:
[self addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];
这里 self
是观察者,@"name"
是要观察的属性的键路径,NSKeyValueObservingOptionNew
表示获取新值,nil
是上下文指针。
2. 实现观察方法:观察者需实现 observeValueForKeyPath:ofObject:change:context:
方法,当被观察属性值发生变化时,该方法会被调用。例如:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
if ([keyPath isEqualToString:@"name"]) {
NSString *newName = change[NSKeyValueChangeNewKey];
NSLog(@"The new name is: %@", newName);
}
}
- 移除观察者:当不再需要观察时,使用
removeObserver:forKeyPath:
方法移除观察者。通常在对象的dealloc
方法中进行。例如:
- (void)dealloc {
[self removeObserver:self forKeyPath:@"name"];
}
适合使用KVO的应用场景:
在一个简单的用户信息展示应用中,用户的姓名(name属性)可能在不同地方被修改,如个人信息编辑页面等。通过KVO,在用户信息显示页面可以轻松监听name属性的变化,并及时更新显示,而不需要在每次修改姓名的地方都手动调用更新显示的方法。这样可以解耦数据变化和视图更新的逻辑,使代码结构更清晰。