delegate, Notification,KVO優缺點?

平時在開發中,常常會遇到不一樣的類之間進行通訊,咱們平時會有如下幾種選擇:spa

1.delegate代理

2.Notification調試

3.KVO對象

特色以下:事件

delegate:開發

1.語法嚴格,定義清晰。如協議的定義實現。編譯器

2.邏輯清楚,控制流程可跟蹤和識別。同步

3.一個類中能夠定義多個協議,每一個協議對應不一樣的delegate.string

4.定義代碼比較多,如協議,delegate屬性,代理方法的實現。io

5.一對一通訊。

notification:

1.不須要寫多少代碼,實現比較簡單。

2.一個對象發出的通知,多個對象能進行反應,一對多的方式實現很簡單。

3.在編譯期不會檢查通知是否可以被觀察者正確的處理; 

4.在釋放註冊的對象時,須要在通知中心取消註冊;

5.在調試的時候應用的工做以及控制過程難跟蹤;

6.須要第三方對象來管理controller與觀察者對象之間的聯繫;

7.controller和觀察者須要提早知道通知名稱、UserInfo dictionary keys。若是這些沒有在工做區間定義,那麼會出現不一樣步的狀況;

8.通知發出後,controller不能從觀察者得到任何的反饋信息(相比較delegate)。

KVO 

1.可以提供一種簡單的方法實現兩個對象間的同步。例如:modelview之間同步;

2.可以對非咱們建立的對象,即內部對象的狀態改變做出響應,並且不須要改變內部對象(SKD對象)的實現;

3.可以提供觀察的屬性的最新值以及先前值;

4.key paths來觀察屬性,所以也能夠觀察嵌套對象;

5.完成了對觀察對象的抽象,由於不須要額外的代碼來容許觀察值可以被觀察

6.能夠一對多。

7.咱們觀察的屬性必須使用strings來定義。所以在編譯器不會出現警告以及檢查;

8.對屬性重構將致使咱們的觀察代碼再也不可用;

9.複雜的「IF」語句要求對象正在觀察多個值。這是由於全部的觀察代碼經過一個方法來指向;

10.當釋放觀察者時不須要移除觀察者。

 

 根據以上的特色,就能夠看出它們之間的區別

1.delegate比NSNotification/KVO效率高,更加直接。

二、KVO和NSNotification這兩個都是負責發出通知,剩下的事情就無論了,沒有返回值,delegate能夠有返回值。

3.delegate只是一對一,KVO和NSNotification能夠一對多。

 

總結:當處理屬性層的消息的事件時候,使用KVO,其餘的儘可能使用delegate,若是代碼處理的東西確實很簡單,那麼用NSNotification會方便些。

相關文章
相關標籤/搜索