前排附上Demo : https://github.com/3KK3/iOS-KVO-
做开发经常碰到在列表里面实现倒计时,或者实时改变cell中某一个数值。这种需求以前都是一直调用reloadData来实时刷新。后来发现可以使用苹果的KVO来实现,记录如下:
1.创建数据Model来完成数据传递:CellModel
2.在Cell传递数据model的时候 ,监听model需要改变的属性
- (void)seCelltModel:(CellModel *)model {
_model = model;
// "price"为CellModel中需要实时改变的属性
[model 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"]) {
// 实时改变cell中相应的值
_priceLabel.text = _model.price;
}
}