- 有用的 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
廣告