(杂记)KVC过程

233 阅读1分钟

一.KVC设值

1.依次判断是否存在set\<key>_set<key>setIs<key>

2.如果不满足1

2.1 判断accessInstanceVariablesDirectly 是否存在返回 YES
2.2 依次判断Ivar_<key>_is<key><key>is<key>
2.3 直接给这些Ivar设值

3.如果不满足2 setValue:forUndefineKey:报错

二.KVC取值

1.依次判断是否有get<key><key>is<key>_<key>方法,如果有则跳到5

2.判断是否为NSArray

3.判断是否为NSSet

4.非集合类型

4.1 accessInstanceVariablesDirectly返回YES
4.2 依次判断Ivar_<key>_is<key><key>is<key>
4.3 如果存在则跳到5

5.具体处理

5.1 如果检索到的属性值是对象指针,则返回结果。
5.2 如果检索到的值是NSNumber支持的标量类型,则将其存储在NSNumber实例中并返回。
5.3 如果结果是NUMber不支持的标量类型,则在转换为NSValue对象返回。

6 如果都没有则valueForUndefinedKey报错

7 集合类型的另外操作