delegate、notification、KVO場景差別

lihaiyin發表於2015-07-22

delegate:

編譯器會給出沒有實現代理方法的警告

一對一

使用weak而不是assign,或者vc消失時置為nil

可以傳遞引數,還可以接收返回值

 

 

notification:

編譯期無法排錯

一對多

恰當時候需要移除註冊,否則多次add會造成多次收到訊息

可以傳遞引數,但無返回值、

 

 

KVO:

簡單的實現兩物件間的資訊同步

能夠對非我們建立的物件,即內部物件的狀態改變作出響應,而且不需要改變內部物件(SKD物件)的實現

能夠提供觀察的屬性的最新值以及先前值;

用key paths來觀察屬性,因此也可以觀察巢狀物件

完成了對觀察物件的抽象,因為不需要額外的程式碼來允許觀察值能夠被觀察

 

我們觀察的屬性必須使用strings來定義。因此在編譯器不會出現警告以及檢查

對屬性重構將導致我們的觀察程式碼不再可用;

複雜的“IF”語句要求物件正在觀察多個值。這是因為所有的觀察程式碼通過一個方法來指向;

當釋放觀察者時不需要移除觀察者。

相關文章