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:
原理:
調(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:
原理:
調(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: