KVC vs KVO(內容為轉載記錄,整合大家的總結為我所用),kvckvo
KVC即key-value coding的縮寫,
KVO即key-value observing的縮寫
假如需要掌握Key-Value Observing機制,那麼需要閱讀本文應該有協助。本文提供了Key-Value Observing的一個概述,並且解釋為什麼需要用它,什麼時候用它。在閱讀本文之前需要對Key-Value Observing需要有一個基本的瞭解。
Key-Value Observing機制的概述
Key-Value Observing (簡寫為KVO):當指定的對象的屬性被修改了,允許對象接受到通知的機制。每次指定的被觀察對象的屬性被修改的時候,KVO都會自動的去通知相應的觀察者。
KVO的優點
當有屬性改變,KVO會提供自動的訊息通知。這樣的架構有很多好處。首先,開發人員不需要自己去實現這樣的方案:每次屬性改變了就發送訊息通知。這是KVO機制提供的最大的優點。因為這個方案已經被明確定義,獲得架構級支援,可以方便地採用。開發人員不需要添加任何代碼,不需要設計自己的觀察者模型,直接可以在工程裡使用。其次,KVO的架構非常的強大,可以很容易的支援多個觀察者觀察同一個屬性,以及相關的值。
KVO如何工作
需要三個步驟來建立一個屬性的觀察員。理解這三個步驟就可以知道KVO如何設計工作的。
(1)首先,構思一下如下實現KVO是否有必要。比如,一個對象,當另一個對象的特定屬性改變的時候,需要被通知到。
例如,PersonObject希望能夠覺察到BankObject對象的accountBalance屬性的任何變化。
(2)那麼PersonObject必鬚髮送一個“addObserver:forKeyPath:options:context:”訊息,註冊成為BankObject的accountBalance屬性的觀察者。
(說明:“addObserver:forKeyPath:options:context:”方法在指定對象執行個體之間建立了一個串連。注意,這個串連不是兩個類之間建立的,而是兩個對象執行個體之間建立的。)
(3)為了能夠響應訊息,觀察者必須實現“observeValueForKeyPath:ofObject:change:context:”方法。這個方法實現如何響應變化的訊息。在這個方法裡面我們可以跟自己的情況,去實現應對被觀察對象屬性變動的相應邏輯。
(4)假如遵循KVO規則的話,當被觀察的屬性改變的話,方法“observeValueForKeyPath:ofObject:change:context:”會自動被調用。
後記:本文提供的只是KVO的一個簡要概述。KVO很強大很靈活,所以還有很多細節,如自動和手動索引值觀察,或一對多和一對一的關係