01 深入理解 KVC KVO 实现机制 — KVC

深入理解 KVC\KVO 实现机制 — KVC

KVC和KVO都属于键值编程而且底层实现机制都是isa-swizzing,所以本来想放在一起讲的。但是篇幅有限所以就分成了两篇博文 KVO实现机制传送门

KVC概述

KVC使用

KVC键值查找

搜索单值成员

KVC实现分析

KVC运用了isa-swizzing技术。isa-swizzing就是类型混合指针机制。KVC通过isa-swizzing实现其内部查找定位。isa指针(is kind of 的意思)指向维护分发表的对象的类,该分发表实际上包含了指向实现类中的方法的指针和其他数据。

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

[site setValue:@"sitename" forKey:@"name"];

// 会被编译器处理成
SEL sel = sel_get_uid(setValue:forKey);
IMP method = objc_msg_loopup(site->isa,sel);
method(site,sel,@"sitename",@"name");

KVC的内部机制:

一个对象在调用setValue的时候进行了如下操作: (1)根据方法名找到运行方法的时候需要的环境参数 (2)他会从自己的isa指针结合环境参数,找到具体的方法实现接口。 (3)再直接查找得来的具体的实现方法