标签:
本章将分为三个部分:
KVO,即NSKeyValueObserving,一个非正式的Protocol,提供一种机制来间接观察其他对象属性的变化。
前几天遇到一个问题,TableView的一个Cell中有一个继承自UIScrollView的横滑控件,横滑该控件,再滑动TableView直到该Cell滚出屏幕,再滚回来,发现横滑控件又回到了起始位置。
不知道怎么调试,一个同事过来帮忙,使用了KVO,观察横滑控件的contentOffset,在监听函数里打断点就可以知道在哪里修改了横滑控件的contentOffset。这种调试技巧实在强大,学习了!
[_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"]; }
标签:
原文地址:http://www.cnblogs.com/chenyg32/p/4808246.html