也來說下常用的KVO

KVO(Key-Value Observing)模式又可以稱之為觀察者模式,它提供一種機(jī)制,當(dāng)指定的對象的屬性被修改后,則對象就會接受到通知。簡單的說就是每次指定的被觀察的對象的屬性被修改后,KVO就會自動通知相應(yīng)的觀察者了。

IOS中KVO的使用方法

IOS框架中是支持KVO的,用戶只需要使用官方提供的API就可以直接實現(xiàn)對應(yīng)的功能。

    1. 注冊觀察者,實施監(jiān)聽;
    1. 在回調(diào)方法中處理屬性發(fā)生的變化;
    1. 移除觀察者;

也就是注冊——>通知——>撤銷注冊的過程。

KVO的工作原理

在官方文檔中對KVO的介紹是一筆帶過的,并沒有什么有用的信息,于是我試著使用最簡單的方式看了下KVO的實現(xiàn)過程,下面上代碼。

//我們實例化一個對象
self.person = [Person new];
//給這個對象的成員變量賦值
self.person.age = 18;
//這里打印下該對象的isa指向 
NSLog(@"isa:%@",[self.person valueForKeyPath:@"isa"]);
//然后我們將該對象注冊成為觀察者
[self.person addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew context:nil];
//再次打印該對象的isa指向
NSLog(@"isa:%@",[self.person valueForKeyPath:@"isa"]);

通過上面的代碼我們可以看到輸出結(jié)果已經(jīng)變成了‘SKVONotifying_Person’這個類,由此來看,KVO的原理應(yīng)該是在一個原有類的基礎(chǔ)上,由系統(tǒng)自動生成一個該類的分類,并在分類中重寫成員變量的setter方法,當(dāng)setter方法被調(diào)用發(fā)出對應(yīng)的通知。

事后我又在網(wǎng)上看了些相關(guān)的文章,其中簡書作者啊左~的一篇文章很是受用,如果各位有興趣更深入的研究可以點這條鏈接繼續(xù)觀看。
KVO的實現(xiàn)原理與具體應(yīng)用-? by:啊左~

最后編輯于
?著作權(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)容

  • 上半年有段時間做了一個項目,項目中聊天界面用到了音頻播放,涉及到進(jìn)度條,當(dāng)時做android時候處理的不太好,由于...
    DaZenD閱讀 3,101評論 0 26
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,624評論 30 472
  • 本文分為2個部分:概念與應(yīng)用。概念部分旨在剖析 KVO 這一設(shè)計模式的實現(xiàn)原理;應(yīng)用部分通過創(chuàng)建的項目,以說明 K...
    啊左閱讀 58,243評論 107 436
  • 本文結(jié)構(gòu)如下: Why? (為什么要用KVO) What? (KVO是什么) How? ( KVO怎么用) Mo...
    等開會閱讀 1,730評論 1 21
  • 現(xiàn)在八點都起不來,他娘親的,不再兩點睡了。 今晚一點睡,明天八點起。
    一袖風(fēng)閱讀 144評論 0 0

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