選擇Blocks還是Delegates

我們可以這樣認(rèn)為,delegate的回調(diào)更多的面向過程,而block則是面向結(jié)果的。如果你需要得到一條多步進(jìn)程的通知,你應(yīng)該使用delegation。而當(dāng)你只是希望得到你請求的信息(或者獲取信息時的錯誤提示),你應(yīng)該使用block。(delegate可以在所有事件中維持state,而多個獨立的block確不能)

使用場景對比

1.回調(diào)方法?

在日常的開發(fā)過程中,我們經(jīng)常會遇到一些完成之后的處理問題,比如完成網(wǎng)路請求之后的回調(diào),或者頁面加載完成之后的回調(diào)等。這個時候我們一般使用的是前兩者方法,即Block或者Delegate。而在一對一傳輸回調(diào)的時候明顯Block的使用更加的簡單高效,只需要在代碼塊中執(zhí)行所需要的操作即可。在一對多的情況下,Delegate更加能夠發(fā)揮出自己的優(yōu)勢。

2.跨層通信?

有的時候我們需要實現(xiàn)在兩個毫無關(guān)聯(lián)的對象之間的通信,這個時候如果使用Block或者Delegate就勢必會增加代碼的耦合性,這樣對于代碼的結(jié)構(gòu)來說是不健康的,因此這個時候使用Notification便是明智的選擇。

3.UI響應(yīng)事件

?用戶在于App的UI進(jìn)行互動的時候,總會需要App進(jìn)行交互響應(yīng),這個時候就毫無疑問的使用代理設(shè)計模式。而蘋果官方給出的建議也是可以肯定的,在Cocoa Touch框架中我們也可以在幾乎所有的UI交互控件的頭文件里看到Delegate的成員變量,也正是印證了在UI響應(yīng)事件上Delegate有著絕對的優(yōu)勢。

4.簡單值的傳遞?

當(dāng)需要進(jìn)行簡單值得傳遞的時候,比如子控件傳輸給父控件所點擊的IndexPath的時候,更加適合使用Block來傳值。因為,如果只是為了傳這一個簡單的值而沒有特別的業(yè)務(wù)處理而定義一個協(xié)議,然后實現(xiàn)協(xié)議,設(shè)置代理再寫方法的話將十分麻煩,得不償失,這個時候簡單高效的Block就可以完美的替代Delegate完成任務(wù)了。

參考鏈接:http://maru-zhang.tk/2015/06/08/iOS-Development-Delegate,Notification,Block/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前文:網(wǎng)絡(luò)上找了很多關(guān)于delegation和block的使用場景,發(fā)現(xiàn)沒有很滿意的解釋,后來無意中在stable...
    ch32053閱讀 1,435評論 2 24
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,146評論 4 61
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,595評論 30 472
  • iris 最近下了幾場小雨,迎春花也開了,春天才來。 1. 最近跟我媽聊微信,她好幾次說前一天晚上頭疼得睡不著覺。...
    米酒少女閱讀 365評論 4 3

友情鏈接更多精彩內(nèi)容