3、KVC底层原理

79 阅读1分钟

KVC的底层原理,KVC的方法查找顺序

编写一段简单的KVC代码,学习底层原理

Person类和具体实现

通过断点调试可以发现,KVC会首先找到set方法,执行set方法

接下来测试如果找不到set方法,会寻找什么方法

去掉属性,因为属性会自动生成set方法

测试,有set方法则执行set方法,没有set方法则执行_set方法,具体如下图所示

如果set方法找不到,则会调用类方法accessInstanceVariablesDirectly

如果返回值为NO,则不允许直接访问成员变量,抛出异常,找不到对应的key

如果返回值为YES,则允许直接访问成员变量,并按照_key、_isKey、key、isKey的顺序进行查找

上述顺序与具体哪个成员变量写在前面并无关系,可以打乱顺序进行测试

可以看到仍然是_key最先被找到,如果上面所有成员变量都不存在,则抛出异常。

以上为KVC的底层原理,查找成员变量的具体顺序。