1.KVC赋值
赋值
查看
setKey:
方法是否存在, 如果存在直接调用查看
_setKey:
方法是否存在, 如果存在直接调用-
查看
+ (BOOL)accessInstanceVariablesDirectly
方法的返回值, 默认返回YES- YES: 可以访问成员变量, 进入下一步
- NO: 不可以访问成员变量, 同时调用
- (void)setValue:(id)value forUndefinedKey:(NSString *)key
方法, 如果方法不存在会抛出异常
调用成员变量:
_key, _isKey, key, isKey
调用顺序, 从左到右, 只有发现存在成员变量, 就不会在调用后续变量
如果没有成员变量, 会调用- (void)setValue:(id)value forUndefinedKey:(NSString *)key
方法, 如果方法不存在会抛出异常
- 附加知识:
setValue
和setObject
的区别
NSMutableDictionary特有的方法
key不为nil的所有继承NSCopying的类型
value不可以为nil
- (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey;
KVC的主要方法
key必须是不为nil的字符串类型
value是可以为nil的
- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;
2.KVC取值
取值
- 判断是否有这几个方法:
getKey, key, isKey, _key
从左到右, 如果有方法直接调用, 取值结束- 如果没有,调用
+ (BOOL)accessInstanceVariablesDirectly
查看是否可以访问成员变量. 默认YES
-
YES
: 可以访问成员变量 -
NO
: 不可以访问成员变量, 判断是否实现- (id)valueForUndefinedKey:(NSString *)key
方法, 实现时调用, 未实现报错
- 如果没有,调用
- 判断是否有这几个成员变量:
_key, _isKey, key, isKey
从左到右, 如果有成员变量, 直接访问, 取值结束