delegate notification block

1.block 一對一的通信,不需要定義協(xié)議方法诵棵;

2.notification 一對多通信 祝旷,通信對象間不需要建立關(guān)系;代碼可讀性差

3.delegate 一對一通信怀跛,需要定義協(xié)議方法,代理對象實現(xiàn)協(xié)議方法忠蝗,并且需要建立代理關(guān)系才可通信


iOS中block和delegate的區(qū)別(面試必問) - CSDN博客

作為非常常見漓拾,且無處不在的block和delegate,理解它們骇两,是我們掌握iOS開發(fā)必備知識點。

1.從源頭上理解和區(qū)別block和delegate

delegate運行成本低哟旗,block的運行成本高栋操。

block出棧需要將使用的數(shù)據(jù)從棧內(nèi)存拷貝到堆內(nèi)存饱亮,當然對象的話就是加計數(shù)矾芙,使用完或者block置nil后才消除近上。delegate只是保存了一個對象指針,直接回調(diào)葱绒,沒有額外消耗斗锭。就像C的函數(shù)指針,只多做了一個查表動作岖是。

2.從使用場景區(qū)別block和delegate

有多個相關(guān)方法实苞。假如每個方法都設置一個 block, 這樣會更麻煩烈疚。而 delegate 讓多個方法分成一組,只需要設置一次猾浦,就可以多次回調(diào)灯抛。當多于 3 個方法時就應該優(yōu)先采用 delegate。當1牧愁,2個回調(diào)時,則使用block兔朦。

delegate更安全些磨确,比如: 避免循環(huán)引用沽甥。使用 block 時稍微不注意就形成循環(huán)引用乏奥,導致對象釋放不了。這種循環(huán)引用恨诱,一旦出現(xiàn)就比較難檢查出來骗炉。而 delegate 的方法是分離開的,并不會引用上下文句葵,因此會更安全些。

delegate回調(diào)返回的參數(shù)被限制在了 NS 類的范圍內(nèi)剂碴,數(shù)量也很有限(當然可以用直接調(diào)用方法的形式在繞過轻专,并不推薦;也可以用 Array 套著傳铭若, 不過這樣需要有文檔支持递览,不然不夠清晰瞳腌,回調(diào)方法也需要獨立的驗證,故也不推薦)儿捧。

那如何使用挑宠?

如果你從其他語言轉(zhuǎn)到 Objective-C 或者 Swift ,相信 Delegation 肯定讓你覺得更加親切各淀,那么在初級階段請使用好這個語法糖,多用临谱,多去理解奴璃;如果你用著 AFNetworking 看著其他老前輩的說法用 Block 覺得效率很高很開心,那就開心的用苟穆,直到你被循環(huán)引用煩到了為止;然后雳旅,在你代碼寫多了之后,你可以開始嘗試接觸其他回調(diào)方式吱晒,去感受這些回調(diào)方式的不同沦童。關(guān)鍵在于對于回調(diào)流程的理解叹话。你要知道你的回調(diào)是一個什么性質(zhì)的回調(diào),如果這個回調(diào)是一個不定期觸發(fā)氏豌,或者會多次觸發(fā)的热凹,那么 Delegation 應該更適合泵喘;如果這個回調(diào)是一個一次性的,并且和調(diào)用方法是單線性關(guān)系的相速,那么 Block 應該更適合鲜锚。在不同的執(zhí)行線(不是線程),不同的執(zhí)行次數(shù)芜繁、執(zhí)行數(shù)量上的區(qū)別,是鑒別使用哪一種回調(diào)的最好判斷方法蔬捷。

對于 Block 來說榔袋,他的執(zhí)行線應該是和調(diào)用方法、回調(diào)方法連續(xù)在一起的速妖;對于 Delegation 和 他的執(zhí)行線可以是連續(xù)的,也可以是調(diào)用方法和回調(diào)方法之間有很長的間隔罕容,或者說回調(diào)方法在執(zhí)行線上會多次出現(xiàn)稿饰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市旅择,隨后出現(xiàn)的幾起案子侣姆,更是在濱河造成了極大的恐慌,老刑警劉巖捺宗,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚜厉,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機康聂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門胞四,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蕊连,你說我怎么就攤上這事游昼。” “怎么了烘豌?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵廊佩,是天一觀的道長。 經(jīng)常有香客問我标锄,道長,這世上最難降的妖魔是什么谓松? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任践剂,我火速辦了婚禮,結(jié)果婚禮上优质,老公的妹妹穿的比我還像新娘。我一直安慰自己巩螃,他們只是感情好匕争,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪春缕。 梳的紋絲不亂的頭發(fā)上艘蹋,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音宅荤,去河邊找鬼浸策。 笑死,一個胖子當著我的面吹牛庸汗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播改化,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼枉昏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了兄裂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤前翎,失蹤者是張志新(化名)和其女友劉穎畅涂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體立宜,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡臊岸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年帅戒,在試婚紗的時候發(fā)現(xiàn)自己被綠了灯帮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡迎献,死狀恐怖腻贰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情冀瓦,我是刑警寧澤写烤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站顶霞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蓝厌。R本人自食惡果不足惜古徒,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望隧膘。 院中可真熱鬧,春花似錦蹦疑、人聲如沸萨驶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至膝但,卻和暖如春谤草,著一層夾襖步出監(jiān)牢的瞬間莺奸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工憾筏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留花鹅,地道東北人枫浙。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像真友,于是被迫代替她去往敵國和親紧帕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容