KVC的底层原理,KVC的方法查找顺序
编写一段简单的KVC代码,学习底层原理
Person类和具体实现
通过断点调试可以发现,KVC会首先找到set方法,执行set方法
接下来测试如果找不到set方法,会寻找什么方法
去掉属性,因为属性会自动生成set方法
测试,有set方法则执行set方法,没有set方法则执行_set方法,具体如下图所示
如果set方法找不到,则会调用类方法accessInstanceVariablesDirectly
如果返回值为NO,则不允许直接访问成员变量,抛出异常,找不到对应的key
如果返回值为YES,则允许直接访问成员变量,并按照_key、_isKey、key、isKey的顺序进行查找
上述顺序与具体哪个成员变量写在前面并无关系,可以打乱顺序进行测试
可以看到仍然是_key最先被找到,如果上面所有成员变量都不存在,则抛出异常。
以上为KVC的底层原理,查找成员变量的具体顺序。