前言: oc中實現的kvo觀察者模式比較呆板,不支持block,運用runtime機制將其進行實現。
詳細實現步驟:
一:給NSObject添加分類(添加相應的添加觀察者,刪除觀察者的方法),這樣凡是繼承NSObject的類生成的對象都會擁有這兩個方法。
二:在添加觀察者的方法中,檢查本類是否有觀察者想要觀察的屬性。如果有,進行下一步。
三:檢查是否已經給該對象的這個屬性的set方法進行了方法實現的替換,如果沒有進行下一步,如有進行第五步。
四: 將這個屬性的set方法的實現指向aop方法,并且添加一個相應的方法指向原有set方法的實現。
五:將觀察者(可以是封裝有觀察者屬性的對象,我就是封裝了一個其他的類)添加到自己的字典中(我用的是一個字典,也可以是其他的模型) 。
六:書寫aop方法,aop方法實現對原先set方法的調用, 并且實現對觀察者的廣播。(兩個方法的調用順序可以自定義,這就是aop前切和后切)
?提示:?
上述只是一個簡單的流程步驟,留言提供源碼,歡迎共同討論學習。?