- 有用的 Cocoa API 资源
- Cocoa API——讨论
Cocoa——键值观察 (KVO)
键值观察 (KVO) 是 Cocoa 和 Cocoa Touch 框架中的一项编程功能,允许一个对象(观察者)观察其他对象(被观察者)的特定属性发生的变化。当被观察的属性发生变化时观察者会收到通知,从而使观察者能够做出回应。
KVO 主要适用于实现响应式编程模式,其中应用程序某一部分的更新可以触发另一部分的更新,这最终有助于在对象之间维持同步。
它广泛应用于 macOS 和 iOS 开发中,以促进应用程序不同组件之间的通信。
Cocoa 应用程序中的键值观察 (KVO)
在 Cocoa 应用程序中实现键值观察 (KVO) 涉及几个关键步骤。在本指南中,我们将专门使用 Objective-C。
实现 KVO 的步骤
步骤 1 − 定义可观察属性
首先在模型类中定义要观察的属性。使用 @property 声明它。
@interface MyModel : NSObject @property (nonatomic, strong) NSString *myString; @end @implementation MyModel @end
步骤 2 − 注册观察
在要观察该属性的类中(例如视口控制器),在适当的方法(如 viewDidLoad)中注册 KVO。
@implementation MyObserver {
MyModel *_model;
}
- (instancetype)initWithModel:(MyModel *)model {
self = [super init];
if (self) {
_model = model;
[_model addObserver:self
forKeyPath:@"myString"
options:NSKeyObservingOptionNew | NSKeyObservingOptionOld
context:nil];
}
return self;
}
步骤 3 − 实现观察者方法
现在,你需要在这里实现 observeValueForKeyPath:ofObject:change:context: 方法来处理或响应对观察属性的更改。
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSKeyValueChangeKey,id> *)change
context:(void *)context {
if ([keyPath isEqualToString:@"myString"]) {
NSLog(@"myString changed from %@ to %@", change[NSKeyValueChangeOldKey], change[NSKeyValueChangeNewKey]);
} else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
步骤 4 − 移除观察者
当不再需要观察者或在观察对象被释放之前移除观察者非常重要,以防止崩溃。
- (void)dealloc {
[_model removeObserver:self forKeyPath:@"myString"];
}
步骤 5 − 触发更改
你现在可以在模型类中更改属性,观察者将收到更改通知,以便观察观察者的响应。
_model.myString = @"New Value"; // This will trigger the observer
广告