iOS原理篇(二): KVC實現(xiàn)原理

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、_isKeykey、isKey順序查找成員變量,如果找到成員變量直接賦值,沒有找到同樣拋出異常NSUnkonwnKeyException

valueForKey:原理:

valueForKey:

調(diào)用valueForKey:方法,首先會按照getKeykey、isKey、_key順序查找方法:
1.找到了方法:調(diào)用方法
2.沒找到方法:同樣會去查看+(BOOL)accessInstanceVariablesDirectly方法的返回值:

  • 返回NO:調(diào)用valueForUndefinedKey:并拋出異常NSUnkonwnKeyException
  • 返回YES:會按照_key、_isKeykey、isKey順序查找成員變量,如果找到成員變量直接取值,沒有找到同樣拋出異常NSUnkonwnKeyException

四、總結(jié):

通過KVC修改屬性會觸發(fā)KVO嗎?
會觸發(fā)KVO,因為它內(nèi)部會調(diào)用willChangeValueForKey:didChangeValueForKey:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容