屬性監(jiān)聽器
誰需要被監(jiān)聽,就調(diào)用addObserver:(被誰監(jiān)聽) forKeyPath:(監(jiān)聽哪個屬性) options:NSKeyValueObservingOptionNew(枚舉,需要監(jiān)聽新值還是舊值) context:nil];
-
然后監(jiān)聽者在自己的類里面實(shí)現(xiàn)一個監(jiān)聽方法
(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
change傳入的是一個字典,里面存了當(dāng)時需要監(jiān)聽的屬性新值或舊值或者新舊值
每次監(jiān)聽必須要的銷毀方法中移出監(jiān)聽否則會出現(xiàn)內(nèi)存問題
自定義提示宏
#define keyPath(objc,keyPath) @(((void)objc.keyPath,#keyPath))