? ? ? ? ? ? ? ? ? ?三種通信方式:
delegat:
—>基本特征是,一個controller定義了一個協(xié)議(即一系列的方法定義)践图。
delegate的優(yōu)勢:
1.非常嚴格的語法。所有將聽到的事件必須是在delegate協(xié)議中有清晰的定義驾锰。
2.如果delegate中的一個方法沒有實現(xiàn)那么就會出現(xiàn)編譯警告/錯誤
3.協(xié)議必須在controller的作用域范圍內(nèi)定義
4.在一個應(yīng)用中的控制流程是可跟蹤的并且是可識別的
5.在一個控制器中可以定義定義多個不同的協(xié)議匿级,每個協(xié)議有不同的delegates
6.沒有第三方對象要求保持/監(jiān)視通信過程
7.能夠接收調(diào)用的協(xié)議方法的返回值。這意味著delegate能夠提供反饋信息給controller
缺點:
1.需要定義很多代碼:1.協(xié)議定義粹庞;2.controller的delegate屬性;3.在delegate本身中實現(xiàn)delegate方法定義
Notification:
它是一個單例對象嘁扼,允許當事件發(fā)生時通知一些對象信粮。
優(yōu)勢:
1.不需要編寫多少代碼,實現(xiàn)比較簡單趁啸;
2.對于一個發(fā)出的通知强缘,多個對象能夠做出反應(yīng)督惰,即1對多的方式實現(xiàn)簡單
3.controller能夠傳遞context對象(dictionary),context對象攜帶了關(guān)于發(fā)送通知的自定義的信息
缺點:
1.在編譯期不會檢查通知是否能夠被觀察者正確的處理旅掂;
2.在釋放注冊的對象時赏胚,需要在通知中心取消注冊
KVO:
是一個對象能夠觀察另外一個對象的屬性的值,并且能夠發(fā)現(xiàn)值的變化商虐。
KVO是一個對象能夠觀察另外一個對象的屬性的值觉阅,并且能夠發(fā)現(xiàn)值的變化
它只能用來對屬性作出反應(yīng),而不會用來對方法或者動作作出反應(yīng)秘车。
優(yōu)點:
1.能夠提供一種簡單的方法實現(xiàn)兩個對象間的同步典勇。例如:model和view之間同步;2.能夠?qū)Ψ俏覀儎?chuàng)建的對象叮趴,即內(nèi)部對象的狀態(tài)改變作出響應(yīng)割笙,而且不需要改變內(nèi)部對象(SKD對象)的實現(xiàn)