iOS

KVC原理总结

2019-03-09  本文已影响41人  Sweet丶

iOS 的KVC技术比较常用,可在运行时动态地对一个对象的属性赋值,并且如果该key是有添加KVO监听, 也会触发这个监听。下面是KVC的实现原理总结。

一、KVC的设值原理


kvc设值原理.png

根据上图可以很清晰的知道KVC的设值过程。假设要设值的属性名为key
1> 当调用setValue:forKey:或者setValue:forKeypath:方法时,是首先查找对象方法 setKey:,如果有则直接调用,就此完成了KVC; 如果没有这个方法则查找_ setKey:方法调用,完成KVC。

2> 当上述2个方法都未找到,则调用对象的类方法 accessInstanceVariablesDirectly的返回值,如果为NO, 表示不允许访问成员变量,则抛出异常如上图; 如果为YES, 则查找是否存在可以设置的成员变量,按照_key_isKeykeyisKey顺序查找,找到了一个就不用继续往后查找了,直接对该成员变量赋值完成KVC,如果没有找到,则抛出如图异常。

二、KVC的取值原理

KVC的取值原理.png
KVC的取值过程如图,假设要取值的属性为key
1> 当调用valueForkey:方法时,首先按照顺序getKeykeyisKey_key查找对象方法,如果找到了方法,则调用方法拿到返回值即完成KVC取值.

2> 如果上述方法都没有找到,则调用对象的类方法 accessInstanceVariablesDirectly的返回值,如果为NO, 表示不允许访问成员变量,则抛出异常如上图; 如果为YES, 则查找是否存在可以取值的成员变量,按照_key_isKeykeyisKey顺序查找,找到了一个就不用继续往后查找了,直接取该成员变量完成KVC取值,如果没有找到,则抛出如图异常。

以上完结

上一篇 下一篇

猜你喜欢

热点阅读