当我们调用setValue: forKey:
时,内部对key的查找顺序是这样的:
1.首先查找setKey:
然后_setKey:
方法是否存在,找到了就传参调用,没有找到setKey:
,_setKey:
方法会调用accessInstanceVariablesDirectly
方法,该方法返回值是Bool
类型,方法内部如果返回NO
,就会调用setValue: forUndefinedKey:
并抛出异常NSUnknownKeyException
,如果返回YES
,则按照_key --> _isKey --> key --> isKey
的顺序查找成员变量,找到了成员变量就直接取值,如果没有找到,就调用setValue: forUndefinedKey:
并抛出异常NSUnknownKeyException
流程图如下:
当我们调用
valueForKey:
时,流程图如下:截屏
网友评论