通知,代理,block 區(qū)別

通知

:?? “一對多”,”多對一” 傳值

四個步驟:

1.發(fā)送通知

2.創(chuàng)建監(jiān)聽者

3.接收通知

4.移除監(jiān)聽者

使用場景:

1- 很多控制器都需要知道一個事件氛谜,應該用通知;

2 - 相隔多層的兩個控制器之間跳轉(zhuǎn)

注意事項:

1, 一旦接收消息的對象多了韧骗,就難以控制了兔院,可能有你不希望的對象接受了消息并做了處理

2,創(chuàng)建了觀察者,在dealloc里面一定要移除谆吴;

-----------------------------------------------------------------------

代理

“一對一”倒源,對同一個協(xié)議,一個對象只能設置一個代理delegate

六個步驟:

1.聲明一個協(xié)議,定義代理方法

2. 遵循協(xié)議

3.設置一個代理對象

4.調(diào)用代理方法

5.給代理賦值

6.實現(xiàn)代理方法

注意事項:

1,單例對象不能用代理句狼;

2,代理執(zhí)行協(xié)議方法時要使用 respondsToSelector檢查其代理是否符合協(xié)議(檢查對象能否響應指定的消息),以避免代理在回調(diào)時因為沒有實現(xiàn)方法而造成程序崩潰

使用場景:

公共接口笋熬,方法較多也選擇用delegate進行解耦

iOS最常用tableViewDelegate,textViewDelegate

iOS有很多例子比如常用的網(wǎng)絡庫AFNetwork腻菇,ASIHTTP庫胳螟,UIAlertView類昔馋。

-----------------------------------------------------------------------


block

什么是Block:

Block是iOS4.0+ 和Mac OS X 10.6+ 引進的對C語言的擴展,用來實現(xiàn)匿名函數(shù)的特性糖耸。

Blocks語法塊代碼以閉包得形式將各種內(nèi)容進行傳遞秘遏,可以是代碼,可以是數(shù)組無所不能嘉竟。

閉包就是能夠讀取其它函數(shù)內(nèi)部變量的函數(shù)邦危。就是在一段請求連續(xù)代碼中可以看到調(diào)用參數(shù)(如發(fā)送請求)和響應結(jié)果。所以采用Block技術能夠抽象出很多共用函數(shù)舍扰,提高了代碼的可讀性倦蚪,可維護性,封裝性边苹。

使用場景:

一:動畫

二:數(shù)據(jù)請求回調(diào)

三:枚舉回調(diào)

四:多線程gcd

...

異步和簡單的回調(diào)用block更好

BLOCK最典型的是大所周知的AFNETWORK第三方庫陵且。

注意事項:

block需要注意防止循環(huán)引用:

ARC下這樣防止:

__weak typeof(self) weakSelf = self;

[yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {

[weakSelf doSomething];

}];

非ARC

__block typeof(self) weakSelf = self;

[yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {

[weakSelf doSomething];

}];

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


delegate 和 block對比

效率:Delegate比NSNOtification高;

1,?? Delegate和Block一般都是一對一的通信勾给;

2,?? Delegate需要定義協(xié)議方法滩报,代理對象實現(xiàn)協(xié)議方法,并且需要建立代理關系才可以實現(xiàn)通信播急;

Block:Block更加簡潔,不需要定義繁瑣的協(xié)議方法售睹,但通信事件比較多的話桩警,建議使用Delegate;

3,? delegate運行成本低昌妹。block成本很高的捶枢。

block出棧需要將使用的數(shù)據(jù)從棧內(nèi)存拷貝到堆內(nèi)存,當然對象的話就是加計數(shù)飞崖,使用完或者block置nil后才消除烂叔;delegate只是保存了一個對象指針,直接回調(diào)固歪,沒有額外消耗蒜鸡。相對C的函數(shù)指針,只多做了一個查表動作 .

4牢裳,代理更注重過程信息的傳輸:比如發(fā)起一個網(wǎng)絡請求逢防,可能想要知道此時請求是否已經(jīng)開始、是否收到了數(shù)據(jù)蒲讯、數(shù)據(jù)是否已經(jīng)接受完成忘朝、數(shù)據(jù)接收失敗

block注重結(jié)果的傳輸:比如對于一個事件,只想知道成功或者失敗判帮,并不需要知道進行了多少或者額外的一些信息

5 Blocks 更清晰局嘁。比如 一個 viewController 中有多個彈窗事件溉箕,Delegate 就得對每個事件進行判斷識別來源。而 Blocks 就可以在創(chuàng)建事件的時候區(qū)分開來了悦昵。這也是為什么現(xiàn)在蘋果 API 中越來越多地使用 Blocks 而不是 Delegate肴茄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市旱捧,隨后出現(xiàn)的幾起案子独郎,更是在濱河造成了極大的恐慌,老刑警劉巖枚赡,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氓癌,死亡現(xiàn)場離奇詭異,居然都是意外死亡贫橙,警方通過查閱死者的電腦和手機贪婉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卢肃,“玉大人疲迂,你說我怎么就攤上這事∧妫” “怎么了尤蒿?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長幅垮。 經(jīng)常有香客問我腰池,道長,這世上最難降的妖魔是什么忙芒? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任示弓,我火速辦了婚禮,結(jié)果婚禮上呵萨,老公的妹妹穿的比我還像新娘奏属。我一直安慰自己,他們只是感情好潮峦,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布囱皿。 她就那樣靜靜地躺著,像睡著了一般跑杭。 火紅的嫁衣襯著肌膚如雪铆帽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天德谅,我揣著相機與錄音爹橱,去河邊找鬼。 笑死,一個胖子當著我的面吹牛愧驱,可吹牛的內(nèi)容都是我干的慰技。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼组砚,長吁一口氣:“原來是場噩夢啊……” “哼吻商!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起糟红,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤艾帐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盆偿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柒爸,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年事扭,在試婚紗的時候發(fā)現(xiàn)自己被綠了捎稚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡求橄,死狀恐怖今野,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罐农,我是刑警寧澤条霜,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站涵亏,受9級特大地震影響蛔外,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溯乒,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豹爹。 院中可真熱鬧裆悄,春花似錦、人聲如沸臂聋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孩等。三九已至艾君,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肄方,已是汗流浹背冰垄。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留权她,地道東北人虹茶。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓逝薪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蝴罪。 傳聞我的和親對象是個殘疾皇子董济,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

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

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,150評論 30 470
  • iOS網(wǎng)絡架構(gòu)討論梳理整理中。要门。虏肾。 其實如果沒有APIManager這一層是沒法使用delegate的,畢竟多個單...
    yhtang閱讀 5,193評論 1 23
  • 設計模式 1.delegate和notification什么區(qū)別欢搜,什么情況使用? 2.描述一下KVO和KVC封豪。 K...
    丶逐漸閱讀 1,957評論 3 2
  • 禪與 Objective-C 編程藝術 (Zen and the Art of the Objective-C C...
    GrayLand閱讀 1,628評論 1 10
  • 特別想重新上一次大學 自己掙生活費 不去戀愛 自己去旅游 窮游一次 長大一次 不去荒廢 不去后悔 充實的活著 為未...
    土豆單餅閱讀 203評論 0 1