通过KVC修改属性会触发KVO吗
2024-03-25 本文已影响0人
buding_
KVC:Key-Value Coding(键值编码),可以通过一个key来访问某个属性
KVC的方法有:
- (void)setValue:(nullable id)value forKey:(NSString *)key;
- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;
- (nullable id)valueForKey:(NSString *)key;
- (nullable id)valueForKeyPath:(NSString *)keyPath;
KVC能否触发KVO?
可以, 只要修改成功即会触发KVO;
因为KVC是会触发willChangeValueForKey:和didChangeValueForKey:
KVC的赋值过程:
- (void)setValue:(nullable id)value forKey:(NSString *)key;
1 按照setKey: _setKey的顺序,查找方法,若找到方法则传递参数调用方法
2 查看+(BOOL)accessInstanceVariablesDirectly, 指示是否允许直接访问成员变量;
3 若返回NO,则报错setValue:ForUndefinedKey:
4 若返回YES,则按照_key,_isKey,key,isKey的顺序,查找成员变量,若找到则直接赋值,否则报错setValue:ForUndefinedKey:
KVC的获值过程:
- (nullable id)valueForKey:(NSString *)key;
1 按照getKey、key、isKey、_key的顺序,查找方法,若找到方法则传递参数调用方法
2 查看+(BOOL)accessInstanceVariablesDirectly, 指示是否允许直接访问成员变量;
3 若返回NO,则报错valueForUndefinedKey:
4 若返回YES,则按照key,_isKey,key,isKey的顺序,查找成员变量,若找到则直接返回该值,否则