setValue:forKey:
- 从这个类中查找
setKey:
方法,如果方法找到了就检查方法参数. - 如果参数类型是objc对象指针则以value为参数直接调用步骤1中找到的set函数
- 如果参数类型不是objc对象指针并且value是nil,就调用
setNilValueForKey:
,这个方法的默认实现是抛出NSInvalidArgumentException
异常. - 如果参数类型是基本类型,需要将value转为
NSNumber/NSValue
后在调用步骤1中找到的set函数 - 如果set函数没有找到,检查accessInstanceVariablesDirectly属性,如果是YES,就按照_key,_isKey,key,isKey的顺序来对属性赋值
- 否则的话调用
setValue:forUndefinedKey:
函数,这个函数的默认实现是抛出NSUndefinedKeyException
异常。