dispatch_group在開(kāi)發(fā)過(guò)程中的應(yīng)用

今天我們來(lái)說(shuō)說(shuō)dispatch_group在開(kāi)發(fā)過(guò)程中的應(yīng)用。

  • 我決定每篇文章的開(kāi)頭都會(huì)放上福利掷漱。

![0QE1_)${@(K3]~HO]@HT]E5.jpg](http://upload-images.jianshu.io/upload_images/1436009-b226ccaab07aac58.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

在實(shí)際開(kāi)發(fā)中我們會(huì)遇到這樣一種需求:某個(gè)頁(yè)面加載時(shí)通過(guò)網(wǎng)絡(luò)請(qǐng)求獲得相應(yīng)的數(shù)據(jù)卜范,再做某些操作海雪,有時(shí)候加載的內(nèi)容需要通過(guò)好幾個(gè)接口的數(shù)據(jù)組合而成舱殿,比如有兩個(gè)請(qǐng)求A和B,我們通常為了省事湾宙,會(huì)將B請(qǐng)求放在A請(qǐng)求成功的回調(diào)中發(fā)起侠鳄,在B的成功回調(diào)中將數(shù)據(jù)組合起來(lái)死宣,這樣做有明顯的問(wèn)題:

  • 請(qǐng)求如果多了十电,需要寫(xiě)許多嵌套的請(qǐng)求
  • 如果在除了最后一個(gè)請(qǐng)求前的某個(gè)請(qǐng)求失敗了,就不會(huì)執(zhí)行后面的請(qǐng)求台盯,數(shù)據(jù)無(wú)法加載
  • 請(qǐng)求變成同步的静盅,這是最大的問(wèn)題寝殴,在網(wǎng)絡(luò)差的情況下,如果有n個(gè)請(qǐng)求市咽,意味著用戶(hù)要等待n倍于并發(fā)請(qǐng)求的時(shí)間才能看到內(nèi)容施绎。

接下來(lái)我們就來(lái)解決這個(gè)問(wèn)題。

dispatch_group_wait

dispatch_group_wait會(huì)同步地等待group中所有的block執(zhí)行完畢后才繼續(xù)執(zhí)行

      NSLog(@"第一個(gè)執(zhí)行");
// 創(chuàng)建一個(gè)group
dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_CONCURRENT);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group,queue,^{
    NSLog(@"線(xiàn)程1");
});
dispatch_group_async(group,queue,^{
    NSLog(@"線(xiàn)程2");
});
dispatch_group_wait(group,DISPATCH_TIME_FOREVER);
NSLog(@"走后執(zhí)行");

執(zhí)行結(jié)果

Paste_Image.png
      dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_CONCURRENT);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group,queue,^{
    NSLog(@"線(xiàn)程一");
});
dispatch_group_async(group,queue,^{
    NSLog(@"線(xiàn)程二");
});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    NSLog(@"一和二完成");
});

NSLog(@"異步執(zhí)行");

執(zhí)行結(jié)果

Paste_Image.png
dispatch_group_enter dispatch_group_leave
        // 創(chuàng)建一個(gè)group
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_CONCURRENT);

dispatch_group_enter(group);
dispatch_async(queue, ^{
    NSLog(@"線(xiàn)程一");
    dispatch_group_leave(group);

});
dispatch_group_enter(group);
dispatch_async(queue, ^{
    NSLog(@"線(xiàn)程二");
    dispatch_group_leave(group);
    
});

 //等待group完成所有異步操作
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    
    NSLog(@"一二倆個(gè)執(zhí)行完最后走");
});

NSLog(@"異步執(zhí)行");

執(zhí)行結(jié)果

Paste_Image.png
  // 下面兩種方法是相同的 沒(méi)發(fā)現(xiàn)什么區(qū)別
    dispatch_group_async(group, queue, ^{ 
});

    dispatch_group_enter(group);dispatch_async(queue, ^{  
  dispatch_group_leave(group);
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抖单,一起剝皮案震驚了整個(gè)濱河市矛绘,隨后出現(xiàn)的幾起案子押蚤,更是在濱河造成了極大的恐慌,老刑警劉巖次屠,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劫灶,死亡現(xiàn)場(chǎng)離奇詭異掖桦,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)涌穆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)宿稀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)赖捌,“玉大人,你說(shuō)我怎么就攤上這事罩锐÷卑Γ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵境氢,是天一觀的道長(zhǎng)碰纬。 經(jīng)常有香客問(wèn)我,道長(zhǎng)寿桨,這世上最難降的妖魔是什么强戴? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任骑歹,我火速辦了婚禮,結(jié)果婚禮上扁掸,老公的妹妹穿的比我還像新娘最域。我一直安慰自己,他們只是感情好镀脂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布沙兰。 她就那樣靜靜地躺著翘魄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪训措。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天,我揣著相機(jī)與錄音纱兑,去河邊找鬼。 笑死捡多,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的垒手。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼泳梆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼优妙!你這毒婦竟也來(lái)了套硼?” 一聲冷哼從身側(cè)響起胞皱,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抄罕,沒(méi)想到半個(gè)月后呆贿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡做入,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耐齐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡埠况,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夺衍,到底是詐尸還是另有隱情喜命,我是刑警寧澤河劝,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布赎瞎,位于F島的核電站煎娇,受9級(jí)特大地震影響二庵,放射性物質(zhì)發(fā)生泄漏催享。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一痰憎、第九天 我趴在偏房一處隱蔽的房頂上張望攀涵。 院中可真熱鬧以故,春花似錦、人聲如沸炉媒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鸭巴,卻和暖如春系冗,著一層夾襖步出監(jiān)牢的瞬間掌敬,已是汗流浹背池磁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工地熄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人端考。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓却特,卻偏偏與公主長(zhǎng)得像筛圆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闽晦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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

  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,304評(píng)論 0 6
  • 同步/異步 同步:多個(gè)任務(wù)情況下荠瘪,一個(gè)任務(wù)A執(zhí)行結(jié)束巧还,才可以執(zhí)行另一個(gè)任務(wù)B。只存在一個(gè)線(xiàn)程也就是主線(xiàn)程麸祷。 異步:...
    XLsn0w閱讀 302評(píng)論 0 0
  • Managing Units of Work(管理工作單位) 調(diào)度塊允許您直接配置隊(duì)列中各個(gè)工作單元的屬性阶牍。它們還...
    edison0428閱讀 7,967評(píng)論 0 1
  • 一走孽、招募與面試的流程有幾步琳状?是什么? 首先非常感謝大鵬老師的分享困食,通過(guò)大鵬老師的分享可得知硕盹。招募與面試的流程大概分...
    王一碗_e7dd閱讀 269評(píng)論 0 0
  • 周末瘩例,十點(diǎn)垛贤,陽(yáng)光從沒(méi)遮嚴(yán)的窗簾縫隙悄悄鉆進(jìn)來(lái),潑灑整整一臥室的金子南吮。擁一床棉被琳彩,一雙瞌睡的眼,遲遲不愿醒來(lái)部凑。八點(diǎn)左...
    清淺光陰閱讀 429評(píng)論 0 0