[关闭]
@chinese-ppmt 2018-04-16T05:25:48.000000Z 字数 642 阅读 1402

KVO原理解析以及自定义KVO

iOS


一、概要

KVO,全称:Key-Value Observing (键值观察),是Objective-C观察者模式的一种实现(另一种是通知)

作用: 对观察者(self,此时是VC)关心的对象(self.person)的属性(@"name")进行监测,如果该属性值变化了,立马告诉观察者,以便观察者做出对应的处理

  1. [self.person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];

二、KVO的优缺点

1. 优点

  1. 运用了设计模式:观察者模式

  2. 开发人员不需要实现属性值变化了发送通知的方案,系统已经封装好了,大大减少开发工作量;

  3. 支持多个观察者观察同一属性,或者一个观察者监听不同属性

2. 缺点

  1. 不能提供自定义的selector

  2. 不能传入block

三、KVO原理解析

Key-Value Observing Programming Guide.png

官方文档翻译如下:

  1. KVO的实现用的是isa-swizzling技术。
  2. isa指针,顾名思义,指向维持一个分派表的 包含了类实现方法的指针和其它数据 的对象类。
  3. 当一个观察者注册一个对象的属性时,被观察对象的isa指针被修改,指向一个中间类而不是真正的类。因此,isa指针的值并不一定反映实例的真正类。
  4. 不能依赖isa指针来确定类的成员变量。相反,你应该使用类方法来确定对象实例属于哪个类。

四、自定义KVO

五、总结

参考链接:
1. ios KVC内部机制探索
2. 自定义KVO(探索KVO底层本质)
3.

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注