KVOController

KVO存在的問題

iOS原生KVO有諸多缺點安全

1. 須要手動在dealloc中移除觀察者,不然會crash。重複remove,也會crashapp

2. 複寫的觀察者方法。post

3. 觀察多個對象時,須要在方法中if else判斷ui

4. 經過context判斷上下文spa

KVOController結構

FB開源的KVOController完美的解決了上述的問題線程

FBKVOController:負責管理Observer(觀察者)和Subject(被觀察者)。其中lock保證FBKVOController的線程安全cdn

_FBKVOInfo:保存KVO相關的全部信息;keyPath,option,context,_block,state。複寫了isEqual:和hash方法,使用keyPath來判斷。server

_FBKVOSharedController:單例。實現系統KVO的方法,本身做爲observer,監聽subject,並從FBKVOInfo中取出subject的信息。負責最後的監聽的實現對象


參考:blog

1. 如何優雅地使用 KVO

2. KVOController代碼分析和踩坑

相關文章
相關標籤/搜索