本章将分为三个部分:
- KVO是什么
- KVO有什么用
- KVO例子
KVO是什么
KVO,即NSKeyValueObserving,一个非正式的Protocol,提供一种机制来间接观察其他对象属性的变化。
KVO有什么用
前几天遇到一个问题,TableView的一个Cell中有一个继承自UIScrollView的横滑控件,横滑该控件,再滑动TableView直到该Cell滚出屏幕,再滚回来,发现横滑控件又回到了起始位置。
不知道怎么调试,Jack过来帮忙,使用了KVO,观察横滑控件的contentOffset,在监听函数里打断点就可以知道在哪里修改了横滑控件的contentOffset。这种调试技巧实在强大,学习了!
KVO例子
添加观察对象
[_gridView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
实现监听方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath isEqualToString:@"contentOffset"]) { NSLog(@"%@", change); } }
因为我们在添加观察对象时options填的是NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld,所以change打印出来的是
{
kind = 1;
new = "NSPoint: {682.5, 0}";
old = "NSPoint: {677, 0}";
}
移除监听对象
- (void)dealloc { [_gridView removeObserver:self forKeyPath:@"contentOffset"]; }