也来说下常用的KVO

也来说下常用的KVO_第1张图片

KVO(Key-Value Observing)模式又可以称之为观察者模式,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。

IOS中KVO的使用方法

IOS框架中是支持KVO的,用户只需要使用官方提供的API就可以直接实现对应的功能。

    1. 注册观察者,实施监听;
    1. 在回调方法中处理属性发生的变化;
    1. 移除观察者;

也就是注册——>通知——>撤销注册的过程。

KVO的工作原理

在官方文档中对KVO的介绍是一笔带过的,并没有什么有用的信息,于是我试着使用最简单的方式看了下KVO的实现过程,下面上代码。

//我们实例化一个对象
self.person = [Person new];
//给这个对象的成员变量赋值
self.person.age = 18;
//这里打印下该对象的isa指向 
NSLog(@"isa:%@",[self.person valueForKeyPath:@"isa"]);
//然后我们将该对象注册成为观察者
[self.person addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew context:nil];
//再次打印该对象的isa指向
NSLog(@"isa:%@",[self.person valueForKeyPath:@"isa"]);

通过上面的代码我们可以看到输出结果已经变成了‘SKVONotifying_Person’这个类,由此来看,KVO的原理应该是在一个原有类的基础上,由系统自动生成一个该类的分类,并在分类中重写成员变量的setter方法,当setter方法被调用发出对应的通知。

事后我又在网上看了些相关的文章,其中作者啊左~的一篇文章很是受用,如果各位有兴趣更深入的研究可以点这条链接继续观看。
KVO的实现原理与具体应用- by:啊左~

你可能感兴趣的:(也来说下常用的KVO)