OC觀察者模式之KVO的使用與思考
轉載本文需註明出處:微信公眾號EAWorld,違者必究。
引言:
目錄:
1、KVO的作用
2、KVO的使用方法
3、KVO的實現原理
4、KVO與KVC、代理、通知的區別
5、KVO實現過程中的注意事項
翻譯過來就是:KVO是運用isa混寫技術實現自動觀察鍵值的。isa指標是指向物件的類,本質上是指向類中的方法實現。當一個物件註冊觀察者時,這個物件的isa指標被修改指向一箇中間類。永遠不要用isa來判斷一個類的繼承關係,而是應該用class方法來判斷類的例項。
1、監聽帶有狀態的基礎控制元件,如開關、按鈕等;
2、監聽字串的改變,當監聽的字串改變時,來做一些自定義的操作;
3、當資料模型的資料發生改變時,檢視元件能動態的更新,及時顯示資料模型更新後的資料,比如tableview中資料發生變化進行重新整理列表操作,監聽 scrollView的contentOffset屬性監聽頁面的滑動.
1.2示例程式碼:
建立兩個類ModelA和ModelB,兩個類中都新增屬性“des”,在控制器中,將B新增為A的觀察者。程式碼如下:
ModelA中程式碼:
控制器中程式碼:
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context
意思就是說:當某些需要控制監聽過程的場景下,就需要手動監聽,比如:為了儘量減少不必要的觸發通知操作,或者當多個更改同時具備的時候才呼叫屬性改變的監聽方法。
實現手動監聽的要點主要包括這幾部分:
a.重寫
(BOOL)automaticallyNotifiesObserversForKey:(NSString *)key
b.在set方法中在賦值的前後分別呼叫
willChangeValueForKey和didChangeValueForKey
2.1實現部分屬性的手動監聽
控制器:
當不點選按鈕的時候,列印結果只列印了name屬性的值:
當點選按鈕之後,會手動觸發監聽,列印結果如下:
2.2所有屬性都手動監聽(禁止自動監聽)
關於作者:小幸運,iOS軟體開發工程師,參與普元Dev客戶端OC程式碼的維護及新功能開發;使用普元移動開發平臺開發郵政移動平臺專案郵我行app。熱愛網際網路技術,努力拓寬技術面的程式媛一枚。
關於EWorld:微服務,DevOps,資料治理,移動架構原創技術分享。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31562043/viewspace-2658407/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- iOS 設計模式_觀察者_KVOiOS設計模式
- PHP 之觀察者模式PHP模式
- redux與觀察者模式Redux模式
- 設計模式之觀察者模式設計模式
- 設計模式之-觀察者模式設計模式
- 設計模式之【觀察者模式】設計模式
- iOS 如何自動移除KVO觀察者iOS
- Android之觀察者模式Android模式
- reactive streams與觀察者模式React模式
- PHP 設計模式之觀察者模式PHP設計模式
- PHP設計模式之觀察者模式PHP設計模式
- Go 設計模式之觀察者模式Go設計模式
- 設計模式之觀察者模式(一)設計模式
- JavaScript設計模式之觀察者模式JavaScript設計模式
- PHP 設計模式之——觀察者模式PHP設計模式
- golang設計模式之觀察者模式Golang設計模式
- Java 設計模式之《觀察者模式》Java設計模式
- Java設計模式之觀察者模式Java設計模式
- iOS設計模式之觀察者模式iOS設計模式
- 設計模式系列之「觀察者模式」設計模式
- php模式設計之 觀察者模式PHP模式
- JavaScript 設計模式之觀察者模式與釋出訂閱模式JavaScript設計模式
- python設計模式之觀察者模式Python設計模式
- 設計模式之觀察者模式(Observer Pattern)設計模式Server
- Java設計模式之(十二)——觀察者模式Java設計模式
- Java常用設計模式之觀察者模式Java設計模式
- 淺談設計模式之觀察者模式設計模式
- 23種設計模式之觀察者模式設計模式
- java設計模式之觀察者模式(9)Java設計模式
- 觀察者模式模式
- 記一次觀察者模式的使用模式
- 折騰Java設計模式之觀察者模式Java設計模式
- 17.java設計模式之觀察者模式Java設計模式
- JavaScript設計模式經典之觀察者模式JavaScript設計模式
- 「HEAD-FIRST」之觀察者模式模式
- RxJava 原始碼解析之觀察者模式RxJava原始碼模式
- Java中的設計模式(二):生產者-消費者模式與觀察者模式Java設計模式
- OC基礎-(四)KVC、KVO