KVO: Key Value Observing
主要用于视图、数据交互,比如界面中相关数据发生了变化,界面的显示也要跟着变化,这时候就需要 KVO 建立界面和数据之间的连接。
1.使用场景一
StockObj.h
#import <Foundation/Foundation.h>
@interface StockObj : NSObject
@property(nonatomic,strong) NSString *stockID;
@property(nonatomic,strong) NSString *price;
- (void)changeStockPrice:(NSString *)newPrice;
@end
StockObj.m
#import "StockObj.h"
@implementation StockObj
- (void)changeStockPrice:(NSString *)newPrice{
self.price = newPrice;
}
@end
vc中首先注册观察
self.stock = [[StockObj alloc] init];
self.stock.stockID = @"SHDQ";
self.stock.price = @"10";
[self.stock addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
实现方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
if([keyPath isEqualToString:@"price"] && object == _stock){
self.myLabel.text = [change objectForKey:@"new"];
}
}
当 price 这个属性被改变时,vc 的 myLabel 也会更新改变的值
2.自己实现 KVO