iOS KVO 通知机制:观察对象属性变化
iOS 中,KVO(Key-Value Observing)是一种观察者模式,它允许一个对象监听另一个对象的属性值的变化。当被观察对象的属性值发生变化时,KVO 会自动发送通知给观察者。
要使用 KVO 发送通知,需要遵循以下步骤:
-
注册观察者: 在观察者对象中调用
addObserver:forKeyPath:options:context:方法来注册观察者,指定需要观察的属性路径、观察的选项和上下文。 -
实现观察者回调方法: 在观察者对象中实现
observeValueForKeyPath:ofObject:change:context:方法,该方法会在被观察属性值发生变化时被调用。 -
移除观察者: 在适当的时候,调用
removeObserver:forKeyPath:context:方法来移除观察者。
以下是一个示例代码,演示如何使用 KVO 发送通知:
// 观察者对象
@interface Observer : NSObject
@end
@implementation Observer
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
if ([keyPath isEqualToString:'property']) {
// 属性值发生变化时的处理逻辑
NSLog('Property value changed: %@', [object valueForKey:keyPath]);
}
}
@end
// 被观察对象
@interface Subject : NSObject
@property (nonatomic, strong) NSString *property;
@end
@implementation Subject
@end
// 使用 KVO 发送通知
Observer *observer = [[Observer alloc] init];
Subject *subject = [[Subject alloc] init];
[subject addObserver:observer forKeyPath:'property' options:NSKeyValueObservingOptionNew context:nil];
// 修改被观察属性的值
subject.property = 'New Value';
// 移除观察者
[subject removeObserver:observer forKeyPath:'property' context:nil];
在上述示例中,当 subject 对象的 property 属性值发生变化时,观察者对象 observer 的 observeValueForKeyPath:ofObject:change:context: 方法会被调用,并打印出新的属性值。
需要注意的是,KVO 只能用于观察 Objective-C 对象的属性值,而不能用于观察基本数据类型(如 int、float 等)的值变化。
原文地址: https://www.cveoy.top/t/topic/b6S9 著作权归作者所有。请勿转载和采集!