MST

星途 面试题库

面试题:Objective-C中KVO的基本使用方式

请简述在Objective-C中如何使用KVO(键值观察)来监听一个对象属性的变化,写出主要的代码步骤。
48.8万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 注册观察: 在需要监听属性变化的类中,使用 addObserver:forKeyPath:options:context: 方法注册观察。例如:
[self addObserver:self
       forKeyPath:@"name"
          options:NSKeyValueObservingOptionNew
          context:nil];

这里 self 是观察者对象,@"name" 是要观察的属性的键路径,NSKeyValueObservingOptionNew 表示当属性值改变时获取新值,context 一般设为 nil

  1. 实现观察方法: 在观察者类中实现 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);
    }
}
  1. 移除观察: 在不需要监听时,要使用 removeObserver:forKeyPath: 方法移除观察,通常在 dealloc 方法中进行。
- (void)dealloc {
    [self removeObserver:self forKeyPath:@"name"];
}