KVC實現(xiàn)原理
- 什么是 KVC
- KVC基本使用
- KVC 原理
- 總結(jié)
一 、 什么是KVC
KVC的全稱是Key-Value Coding,俗稱“鍵值編碼”,可以通過一個key來訪問某個屬性;
二 、 KVC基本使用
常用API:
//設(shè)值
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
- (void)setValue:(id)value forKey:(NSString *)key;
//取值
- (id)valueForKeyPath:(NSString *)keyPath;
- (id)valueForKey:(NSString *)key;
三、KVC原理
setValue: forKey:原理:

setValue:forKey:
調(diào)用
setValue:forKey:方法,首先會按照setKey、_setKey:順序查找方法:1.找到了方法:直接傳遞參數(shù)調(diào)用方法設(shè)值
2.沒找到方法:會去查看
+(BOOL)accessInstanceVariablesDirectly方法的返回值,該方法表示是否直接設(shè)置成員變量的值。
- 返回
NO:調(diào)用setValue:forUndefinedKey:并拋出異常NSUnkonwnKeyException - 返回
YES:會按照_key、_isKey、key、isKey順序查找成員變量,如果找到成員變量直接賦值,沒有找到同樣拋出異常NSUnkonwnKeyException
valueForKey:原理:

valueForKey:
調(diào)用
valueForKey:方法,首先會按照getKey、key、isKey、_key順序查找方法:1.找到了方法:調(diào)用方法
2.沒找到方法:同樣會去查看
+(BOOL)accessInstanceVariablesDirectly方法的返回值:
- 返回
NO:調(diào)用valueForUndefinedKey:并拋出異常NSUnkonwnKeyException - 返回
YES:會按照_key、_isKey、key、isKey順序查找成員變量,如果找到成員變量直接取值,沒有找到同樣拋出異常NSUnkonwnKeyException
四、總結(jié):
通過KVC修改屬性會觸發(fā)KVO嗎?
會觸發(fā)KVO,因為它內(nèi)部會調(diào)用willChangeValueForKey:和didChangeValueForKey: