面试题

IOS-详解KVO底层实现

2019-08-05  本文已影响0人  luonaerduo

一、KVO (Key-Value Observing)

KVO 是 Objective-C 对观察者模式(Observer Pattern)的实现。也是 Cocoa Binding 的基础。当被观察对象的某个属性发生更改时,观察者对象会获得通知。

有意思的是,你不需要给被观察的对象添加任何额外代码,就能使用 KVO 。这是怎么做到的?

二、 KVO内部实现原理

三、补充: 如何关闭默认的KVO的默认实现,并进入自定义的KVO实现?(看链接)

四、附注: KVC底层实现原理(如下)

KVC运用了一个isa-swizzling技术. isa-swizzling就是类型混合指针机制, 将2个对象的isa指针互相调换, 就是俗称的黑魔法.
KVC主要通过isa-swizzling, 来实现其内部查找定位的. 默认的实现方法�由NSOject提供isa指针, 如其名称所指,(就是is a kind of的意思), 指向分发表对象的类. 该分发表实际上包含了指向实现类中的方法的指针, 和其它数据。

  • 具体主要分为三大步
  • 或者这么说

比如说如下的一行KVC的代码:

|

1

2

3

4

5

6

7

8

9

|

[object setValue:@``"13123" forKey:@``"uuid"``];

就会被编译器处理成:

// 首先找到对应sel

SEL sel = sel_get_ ``uuid``(``"setValue:forKey:"``);

// 根据object->isa找到sel对应的IMP实现指针

IMP method = objc_msg_lookup (object->isa,sel);

// 调用指针完成KVC赋值

method(object, sel, @``"13123"``, @``"uuid"``);

|

上一篇 下一篇

猜你喜欢

热点阅读