KVO&代理&block&通知中心

KVO:鍵值觀察。
     可以監聽對象的屬性變化。一旦屬性發生變化,立即執行observaValueForKeyPath方法(KVO統一的監聽方法)
     1,對象:監聽誰,就是誰
     2,參數
     1》觀察者:任意的NSObject,
     2》監聽鍵值:
     3》鍵值觀察選項:New , Old 。。。可以用按位或設置數值
     4》上下文:區分觀察信息。使用很少,主要在監聽多個鍵值的時候加以區分。
特點:無論監聽了多少個鍵值,都會統一調用一個方法。所以,最好不要監聽太多鍵值,值監聽最重要的。

面試題:KVO是同步的還是異步的?
 -同步的。爲了保證屬性變數時及時作出響應。
     陷阱:一旦在後臺線程修改監聽對象的鍵值,會在相同線程調用KVO的方法。
               一旦在KVO執行的方法中,如果要修改某一個對象的屬性,可能會涉及到線程安全問題。一不小心,就會出現資源搶奪的問題,需要考慮使用互斥鎖。

提示:KVO在日常開發中,絕大多數應該儘量設計的簡單。最好堅挺的對象屬性,不要跨線程修改。如果一定要在後太修改,注意在監聽方法中,代碼要考慮加鎖。
實際:一般不會使用KVO,但是有些時候,必須使用KVO才能解決問題。

不要忘記dealloc (所有觀察者模式不用的時候都要把觀察者去掉)
自動佈局的底層就是KVO實現的 


******************四者區別*************

1,是否在多個監聽者:通知中心是一對多的,代理和block一對一,KVO監聽者最少越好。
2,雙向通訊(是否有返回值):block和代理可以有返回值,通知中心和KVO沒有返回值。Block適合回調數少,2-3個爲佳。代理可以適合非常多的事件。
發佈了40 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章