也来说下常用的KVO

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:啊左~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 上半年有段时间做了一个项目,项目中聊天界面用到了音频播放,涉及到进度条,当时做android时候处理的不太好,由于...
    DaZenD阅读 3,046评论 0 26
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,217评论 30 472
  • 本文分为2个部分:概念与应用。概念部分旨在剖析 KVO 这一设计模式的实现原理;应用部分通过创建的项目,以说明 K...
    啊左阅读 57,975评论 107 438
  • 本文结构如下: Why? (为什么要用KVO) What? (KVO是什么) How? ( KVO怎么用) Mo...
    等开会阅读 1,666评论 1 21
  • 现在八点都起不来,他娘亲的,不再两点睡了。 今晚一点睡,明天八点起。
    一袖风阅读 125评论 0 0