通过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的顺序,查找成员变量,若找到则直接返回该值,否则
上一篇下一篇

猜你喜欢

热点阅读