咱們在上文iOS底層原理之KVO分析(上)中分析了KVO
原理,本文主要是根據KVO
原理自定義KVO
的實現。git
KVO
信息的類定義管理KVO
信息的類,主要包括Observer
、keyPath
、NSKeyValueObservingOptions
以及監聽屬性變化的回調block
,例如本文以SafeKVOInfoManager
類爲管理類,代碼以下github
KVO
處理類重點、難點
爲了使全部繼承於NSObject
類均可以使用咱們自定義的KVO
,KVO
處理類處理成NSObject
的分類。本文以NSObject+SafeKVO
分類做爲KVO
處理類`。markdown
NSObject+SafeKVO
分類聲明函數safeAddObserver:
函數分析咱們給任意對象添加屬性KVO
監聽,都須要調用safeAddObserver:
函數函數
judgeSetterMethodFromeKeyPath
函數分析setterForGetter
函數getterForSetter
creatSafeKVONotifingObservingKVOWithKeyPath
分析safe_class
函數分析safe_setter
函數分析safe_dealloc
分析safe_dealloc
運行後結果分析safeRemoveObserver
函數分析safeRemoveObserver
函數能夠不一樣調用 oop