OC面试相关

OC底层原理18 - KVO

2021-03-19  本文已影响0人  卡布奇诺_95d2

简介

KVO,全称为Key-Value observing,中文名为键值观察,KVO是一种机制,它允许将其他对象的指定属性的更改通知给对象

Key-Value Observing Programming Guide官方文档中,又这么一句话:理解KVO之前,必须先理解KVC(即KVO是基于KVC基础之上)。

KVC是键值编码,在对象创建完成后,可以动态的给对象属性赋值,而KVO是键值观察,提供了一种监听机制,当指定的对象的属性被修改后,则对象会收到通知,所以可以看出KVO是基于KVC的基础上对属性动态变化的监听。

KVO与NSNotificatioCenter的区别

KVO 使用

基本操作

移除观察者注意点:

KVO自动触发和手动触发

注册 Dependent Keys

在许多情况下,一个属性的值依赖于另一个对象中的一个或多个其他属性的值。如果一个属性的值发生了变化,那么派生属性的值也应该被标记为发生了变化。如何确保为这些依赖属性触发键-值观察通知,取决于关系的基数。

  1. 当属性发生更改时,手动触发派生属性的KVO。
  2. 重写keyPathsForValuesAffectingValueForKey:方法,指明派生属性依赖于哪个属性。
  3. 实现类方法keyPathsForValuesAffecting<Key>,指明派生属性依赖于哪个属性。
  4. 实现类方法keyPathsForValuesAffectingValueForKey:,指明派生属性依赖于哪个属性。

KVO中的isa-swizzling

KVO 的实现用了一种叫isa-swizzling的技术。isa就是指向类的指针,当一个对象的一个属性注册了观察者后,被观察对象的isa就指向了一个系统为我们生成的中间类,而不是我们自己创建的类。在这个类中,系统为我们重写了被观察属性setter方法。

自定义KVO Demo

本文中的示例,及自定义KVO 请见Demo地址

上一篇下一篇

猜你喜欢

热点阅读