一.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 集合类型的另外操作