delegate:
編譯器會給出沒有實現代理方法的警告
一對一
使用weak而不是assign,或者vc消失時置為nil
可以傳遞引數,還可以接收返回值
notification:
編譯期無法排錯
一對多
恰當時候需要移除註冊,否則多次add會造成多次收到訊息
可以傳遞引數,但無返回值、
KVO:
簡單的實現兩物件間的資訊同步
能夠對非我們建立的物件,即內部物件的狀態改變作出響應,而且不需要改變內部物件(SKD物件)的實現
能夠提供觀察的屬性的最新值以及先前值;
用key paths來觀察屬性,因此也可以觀察巢狀物件
完成了對觀察物件的抽象,因為不需要額外的程式碼來允許觀察值能夠被觀察
我們觀察的屬性必須使用strings來定義。因此在編譯器不會出現警告以及檢查
對屬性重構將導致我們的觀察程式碼不再可用;
複雜的“IF”語句要求物件正在觀察多個值。這是因為所有的觀察程式碼通過一個方法來指向;
當釋放觀察者時不需要移除觀察者。