Objective-C學習總結(jié)二 kvo kvc

KVO

  • kvo 全稱是Key-Value Observing 俗稱鍵值監(jiān)聽,可以用來監(jiān)聽一個對象屬性值的改變。
C48BFA40-41B7-4846-BA1B-2B9590A27709.png
未使用KVO監(jiān)聽
683CD78E-670E-4A7A-B54E-75D527C87985.png
使用了KVO監(jiān)聽
9F2333C9-D8CB-4C11-AC62-A5DA79093320.png

NSSetValueAndNOtify的內(nèi)部實現(xiàn)

      [self willChangeValueForkey:@"age"];
        //原來的setter實現(xiàn)
      [self didChangeValueForkey:@"age"];

調(diào)用willChangeValueForKey;
調(diào)用原來的setter實現(xiàn)
調(diào)用didChangeValueForKey;
didChangeValueForKey:回調(diào)用observer的observerValueForKeyPath:ofObject:change:context方法。

KVC

KVC 全稱是Key-Value Coding,俗稱鍵值編碼,可以贏一個key來訪問屬性。
常見的API

    -(void)setValue:(id)value forKeyPath:(NSString*)keyPath;
    -(void)setValue:(id)value forKey:(NSString*)key;
    -(id)valueForKeyPath:(NSString*)keyPath;
    -(id)valueForKey:(NSString*)key;
  • setValue:forkey:的原理


    8716F928-DFC4-47A3-AD26-9DC0267562F5.png

    accessInstanceVariablesDirectly 方法返回默認值為YES

  • valueForKey:的原理


    B8143DD9-DD7B-4D68-A85A-EF2AF7D459FC.png
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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