KVC(key value coding)
(一)原理
(1)赋值时首先判断有没有对应的set方法,如果有直接赋值
(2)如果没有set方法,查看有没有和key一样的成员变量,如果有,直接赋值
(3)如果没有成员变量,查找有没有对应的属性,如果有,直接赋值
(4)如果都没有,调用setvalue forUndefinedKey方法
(二)使用场景
(1)赋值
- (void)setValue:(nullable id)value forKey:(NSString *)key;
- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;
- (void)setValue:(nullable id)value forUndefinedKey:(NSString *)key;
- (void)setValuesForKeysWithDictionary:(NSDictionary<NSString *, id> *)keyedValues;
(2)取值
- (id)valueForKey:(NSString *)key;
- (id)valueForKeyPath:(NSString *)keyPath;
- (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;
(3)字典转模型
- (void)setValuesForKeysWithDictionary:(NSDictionary<NSString *, id>
(4)模型转字典
- (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;
KVO
(一)实现原理
(1)对象添加observer后,runtime会自动生成一个中间类,让对象的isa指针指向这个中间类(继承自原类),
(2)中间类会重写set方法,并在调用元set方法的前后添加willChangeValue和didChangeValue方法,继而通知observer
如果需要手动触发kvo,只需调用willChangeValue和didChangeValue方法即可
网友评论