OC语法 KVO

  • Key-Value-Observe 键指针监听

用于监听某个属性值的改变。是基于KVC(Key-Value-Coding 键值编码)实现的.

  • 实现原理

在为实例对象添加观察者后,系统内部会新建一个名为 NSKVONotifying_类名 的类继承原实例对象的父类,并将原实例对象的isa指针指向 NSKVONotifying_类名 类,并为NSKVONotifying_类名 添加以下方法
1.set[属性名]:方法, 在原实例对象调用set[属性名]:方法时,会通过isa指针,寻找到NSKVONotifying_类名set[属性名]:方法并调用。
2.class:方法 在实例对象调用时返回原实例对象的类名,欺骗。
3.delloc:方法 在移除监听做处理。
4._isKVOA:方法 判断是不是KVO。的类

  • set[属性名]:方法

在原实例对象调用set[属性名]:方法时,会通过isa指针,寻找到NSKVONotifying_类名set[属性名]:方法并调用。NSKVONotifying_类名set[属性名]:方法内部会调用_NSSet[值得类型]ValueAndNotify方法,

_NSSet[值得类型]ValueAndNotify`方法 值

_NSSet[值得类型]ValueAndNotify方法 的内部实现

[self willChangeValueForKey:@""];
//原来的setter的实现
[self didChangeValueForKey:@""];

didChangeValueForKey:内部会调用obeseverValueForKeyPath:ofObject:change:context:方法 通知外部调用完成

可以得知,KVO依赖于set[属性名]:方法 ,set[属性名]:方法 又依赖于 KVC

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

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,148评论 1 32
  • KVO的全称是Key-Value Observing,即"键值监听",可以用于监听某个对象属性值得改变。 F、题:...
    iLeooooo阅读 549评论 0 2
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,196评论 6 13
  • 面向对象的三大特性:封装、继承、多态 OC内存管理 _strong 引用计数器来控制对象的生命周期。 _weak...
    运气不够技术凑阅读 1,137评论 0 10
  • 真正走到最后的爱情 根本不是你以为我不会走 我以为你会挽留 而是你以为我不会走 即便你再三挽留 爱情世界里 多少女...
    龙凤妈咪酷儿阅读 259评论 0 0