iOS kvc

2021-04-14  本文已影响0人  nickNic

1通过kvc修改属性会触发kvo么?
会触发kvo

KVC

键值编码(Key-Value Coding),它是一种通过key值访问类属性的机制,而不是通过setter/getter方法访问。

KVC 原理

设值的实现

1.首先搜索是否有setKey:的方法,没有则会搜索是否有setIsKey:的方法。

2.如果没有找到setKey:的方法,此时看+ (BOOL)accessInstanceVariablesDirectly; (是否直接访问成员变量)方法。
若返回NO,则直接调用- (nullable id)valueForUndefinedKey:;(默认是抛出异常)。

若返回YES,按 _key、_iskey、key、isKey的顺序搜索成员名。

3.在第二步还没搜到的话就会调用- (nullable id)valueForUndefinedKey:方法。

取值的实现

1.按先后顺序搜索getKey、key、isKey、_getKey、_key五个方法,若某一个方法被实现,取到的即是方法返回的值,后面的方法不再运行。如果是BOOL或者Int等值类型, 会将其包装成一个NSNumber对象。

2.若这五个方法都没有找到,则会调用+ (BOOL)accessInstanceVariablesDirectly方法判断是否允许取成员变量的值。

若返回NO,直接调用- (nullable id)valueForUndefinedKey:(NSString *)key方法,默认是奔溃。

若返回YES,会按先后顺序取_key、_isKey、 key、isKey的值。

3.返回YES时,_key、_isKey、 key、isKey的值都没取到,调用- (nullable id)valueForUndefinedKey:(NSString *)key方法。

上一篇 下一篇

猜你喜欢

热点阅读