当调用setValue:forKey:设置属性value时,其底层的执行流程为:
-
首先查找是否有这三种setter方法,按照查找顺序为
set<Key>:
、_set<Key>
、setIs<Key>
1.1 如果有其中任意一个setter方法,则直接设置属性的value(要注意:key是指成员变量名,首字符大小写需要符合KVC的命名规范)
1.2 如果都没有,则进入下一步 2 -
查找accessInstanceVariablesDirectly是否返回YES
2.1 如果返回YES,则查找间接访问的实例变量进行赋值,查找顺序为:_<key>
、_is<Key>
、<key>
、is<Key>
- 如果找到其中任意一个实例变量,则赋值
- 如果都没有,则进入最后一步 3
2.2 如果返回NO,则进入最后一步 3
- 如果setter方法 或者 实例变量都没有找到,系统会执行该对象的
setValue:forUndefinedKey:
方法,默认抛出NSUndefinedKeyException
类型的异常
网友评论