KVC/KVO之KVO

本章将分为三个部分:

  • 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"];
}

 

posted @ 2015-09-14 21:35  Norcy  阅读(326)  评论(0编辑  收藏  举报