1.代理
代理是:梯投。
2.Block
delegate和block的作用都是用于兩個類之間的回傳數(shù)據(jù),即當(dāng)一個類創(chuàng)建了另一個類的實例的時候,想從被創(chuàng)建的類傳遞信息到創(chuàng)建它的類(例:比較常見的是分蓖,tableview類中創(chuàng)建的cell類想將cell類的事件傳遞到tableview類尔艇,例2:修改信息的頁面,比如修改用戶名是點擊用戶名回到下一級頁面修改么鹤,修改后返回到本級终娃。也要用的數(shù)據(jù)的回傳)。
a蒸甜、delegate和block的差別:
1棠耕、delegate運(yùn)行成本低。block成本很高的柠新。
block出棧需要將使用的數(shù)據(jù)從棧內(nèi)存拷貝到堆內(nèi)存窍荧,當(dāng)然對象的話就是加計數(shù),使用完或者block置nil后才消除恨憎;delegate只是保存了一個對象指針蕊退,直接回調(diào),沒有額外消耗憔恳。相對C的函數(shù)指針瓤荔,只多做了一個查表動作 。
3.代理和Block的區(qū)別:http://www.reibang.com/p/4e829fa34494
4.通知;
它是一個單例對象钥组,允許當(dāng)事件發(fā)生時通知一些對象输硝。它允許我們在低程度耦合的情況下,滿足控制器與一個任意的對象進(jìn)行通信的目的者铜。這種模式的基本特征是為了讓其他的對象能夠接收到在該controller中發(fā)生某種事件而產(chǎn)生的消息腔丧,controller用一個key(通知名稱)。這樣對于controller來說是匿名的作烟,其他的使用同樣的key來注冊了該通知的對象(即觀察者)能夠?qū)νㄖ氖录鞒龇磻?yīng)愉粤。
優(yōu)勢:1.不需要編寫多少代碼,實現(xiàn)比較簡單拿撩;2.對于一個發(fā)出的通知衣厘,多個對象能夠做出反應(yīng),即1對多的方式實現(xiàn)簡單
缺點:1.在編譯期不會檢查通知是否能夠被觀察者正確的處理压恒;
2.通知發(fā)出后影暴,controller不能從觀察者獲得任何的反饋信息。
3.在釋放注冊的對象時探赫,需要在通知中心取消注冊型宙;
4.在調(diào)試的時候應(yīng)用的工作以及控制過程難跟蹤;
5.代理和通知:
我個人不是很喜歡使用通知中心伦吠。我發(fā)現(xiàn)用通知中心很難把握應(yīng)用的執(zhí)行流程妆兑。UserInfo dictionaries的keys到處傳遞導(dǎo)致失去了同步魂拦,而且在公共空間需要定義太多的常量。對于一個工作于現(xiàn)有的項目的開發(fā)者來說搁嗓,如果過分的使用通知中心芯勘,那么很難理解應(yīng)用的流程。
我覺得使用命名規(guī)則好的協(xié)議和協(xié)議方法定義對于清晰的理解controllers間的通信是很容易的腺逛。努力的定義這些協(xié)議方法將增強(qiáng)代碼的可讀性荷愕,以及更好的跟蹤你的app。
當(dāng)然會有delegation模式不適合的例外情況出現(xiàn)棍矛,而且notification可能更加有效安疗。例如:應(yīng)用中所有的controller需要知道一個事件。然而這些類型的場景很少出現(xiàn)够委。另外一個例子是當(dāng)你建立了一個架構(gòu)而且需要通知該事件給正在運(yùn)行中應(yīng)用茂契。
根據(jù)經(jīng)驗,如果是屬性層的時間慨绳,不管是在不需要編程的對象還是在緊緊綁定一個view對象的model對象,我只使用觀察真竖。
6.KVO是脐雪。。恢共。.
它只能用來對屬性作出反應(yīng)战秋,而不會用來對方法或者動作作出反應(yīng)。