iOS 使用dispatch_group_enter使多次網(wǎng)絡(luò)請(qǐng)求依次執(zhí)行

常用的幾個(gè)方法

  • dispatch_group_enter :通知 group,下個(gè)任務(wù)要放入 group 中執(zhí)行了
  • dispatch_group_leave: 通知 group,任務(wù)成功完成,要移除,與 enter成對(duì)出現(xiàn)
  • dispatch_group_wait: 在任務(wù)組完成時(shí)調(diào)用尤溜,或者任務(wù)組超時(shí)是調(diào)用(完成指的是enter和leave次數(shù)一樣多)
  • dispatch_group_notify: 只要任務(wù)全部完成了,就會(huì)在最后調(diào)用

具體情況分析

詳見:dispatch_group_enter 使用與講解

實(shí)際應(yīng)用

我們就可以使用dispatch_group_enter了,在執(zhí)行了多段之后再在 notify 中執(zhí)行另一個(gè),類似于柵欄的效果.但是如果是網(wǎng)絡(luò)請(qǐng)求,需要達(dá)到網(wǎng)絡(luò)請(qǐng)求嵌套的效果,A網(wǎng)絡(luò)請(qǐng)求完之后再請(qǐng)求 B,需要添加dispatch_group_wait,讓線程等待 A 執(zhí)行完成之后再執(zhí)行 B.

// A 請(qǐng)求數(shù)據(jù)
- (void)loadADataFinished:(void(^)(BOOL success))finished;
// B 請(qǐng)求數(shù)據(jù)
- (void)loadBDataFinished:(void(^)(BOOL success))finished;
// C 請(qǐng)求數(shù)據(jù)
- (void)loadCDataFinished:(void(^)(BOOL success))finished;

// 請(qǐng)求是否全部完成
- (void)finishedDataFinished:(void(^)(BOOL success))finished{
  dispatch_group_t group = dispatch_group_create(); 
  dispatch_group_enter(group);
  [self loadADataFinished:^(BOOL success){
    if (success){
      dispatch_group_leave(group);
    }else{
      finished(NO);
    }
  }];
  dispatch_group_enter(group);
  [self loadBDataFinished:^(BOOL success){
    if (success){
      dispatch_group_leave(group);
    }else{
      finished(NO);
    }
  }]; 

 dispatch_group_wait(group, DISPATCH_TIME_FOREVER);// A,B同時(shí)執(zhí)行, 執(zhí)行完才會(huì)執(zhí)行下面的 C
 dispatch_group_enter(group);
 [self loadCDataFinished:^(BOOL success){
    if (success){
      dispatch_group_leave(group);
    }else{
      finished(NO);
    }
  }]; 
 
  //  group 中的任務(wù)都成功完成后,才會(huì)返回 YES
  dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        finished(YES);
   });
}

在我們的項(xiàng)目中,在一個(gè) VC 中會(huì)有多個(gè)網(wǎng)絡(luò)請(qǐng)求A,B.現(xiàn)在要實(shí)現(xiàn)的是:A 請(qǐng)求數(shù)據(jù)成功之后,再執(zhí)行 B 的網(wǎng)絡(luò)請(qǐng)求.這時(shí)候因?yàn)榫W(wǎng)絡(luò)請(qǐng)求是異步的,所以我們要達(dá)到效果,需要在子線程中加入信號(hào)量dispatch_semaphore_t,在網(wǎng)絡(luò)請(qǐng)求內(nèi)部標(biāo)記信號(hào)量,請(qǐng)求完成之后將信號(hào)量清為 0.

// A 請(qǐng)求數(shù)據(jù)
- (void)loadADataFinished:(void(^)(BOOL success))finished;
// B 請(qǐng)求數(shù)據(jù)
- (void)loadBDataFinished:(void(^)(BOOL success))finished;

dispatch_async(dispatch_get_global_queue(0, 0), ^{

        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
         [self loadADataFinished:^(BOOL success){
            if (success){ 
              }else{
                 finished(NO);
             }
              dispatch_semaphore_signal(semaphore);
         }]; 
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); // A請(qǐng)求完成之后,請(qǐng)求 B
         [self loadBDataFinished:^(BOOL success){
            if (success){ 
              }else{
                 finished(NO);
             }
              dispatch_semaphore_signal(semaphore);
         }];  
});

其他情況可以參考:GCD 的控制使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末琐簇,一起剝皮案震驚了整個(gè)濱河市茫陆,隨后出現(xiàn)的幾起案子叨橱,更是在濱河造成了極大的恐慌狼牺,老刑警劉巖筷畦,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件继效,死亡現(xiàn)場離奇詭異熟丸,居然都是意外死亡训措,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門光羞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绩鸣,“玉大人,你說我怎么就攤上這事纱兑⊙轿牛” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵潜慎,是天一觀的道長捡多。 經(jīng)常有香客問我,道長铐炫,這世上最難降的妖魔是什么垒手? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮倒信,結(jié)果婚禮上科贬,老公的妹妹穿的比我還像新娘。我一直安慰自己鳖悠,他們只是感情好榜掌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布优妙。 她就那樣靜靜地躺著,像睡著了一般憎账。 火紅的嫁衣襯著肌膚如雪套硼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天胞皱,我揣著相機(jī)與錄音熟菲,去河邊找鬼。 笑死朴恳,一個(gè)胖子當(dāng)著我的面吹牛抄罕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播于颖,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼呆贿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了森渐?” 一聲冷哼從身側(cè)響起做入,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎同衣,沒想到半個(gè)月后竟块,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耐齐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年浪秘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片埠况。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耸携,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辕翰,到底是詐尸還是另有隱情夺衍,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布喜命,位于F島的核電站沟沙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏壁榕。R本人自食惡果不足惜矛紫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望护桦。 院中可真熱鬧含衔,春花似錦煎娇、人聲如沸二庵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽催享。三九已至杭隙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間因妙,已是汗流浹背痰憎。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來泰國打工盼产, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赤赊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓囤锉,卻偏偏與公主長得像以故,于是被迫代替她去往敵國和親蜗细。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

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

  • 博客鏈接深入理解GCD之dispatch_group 之前已經(jīng)介紹了dispatch_semaphore的底層實(shí)現(xiàn)...
    NeroXie閱讀 30,893評(píng)論 11 86
  • 一怒详、簡單介紹下將會(huì)用到的一些東西 英語不好就不翻譯官方文檔了.. 1炉媒、dispatch_group_async S...
    Albert新榮閱讀 1,722評(píng)論 0 1
  • 一:base.h 二:block.h 1. dispatch_block_flags:DISPATCH_BLOCK...
    小暖風(fēng)閱讀 2,423評(píng)論 0 0
  • 關(guān)于dispatch_group的概念以及幾種場景下的使用 1、關(guān)于dispatch_group 把一組任務(wù)提交到...
    nick_zheng閱讀 1,407評(píng)論 1 1
  • 偶然間昆烁,看過這樣四幅畫吊骤,第一幅圖是一個(gè)玻璃瓶子,第二幅圖剛剛發(fā)育的樹苗静尼,第三幅圖是茁壯成長的小樹白粉,第四幅圖...
    哆啦A藍(lán)夢閱讀 565評(píng)論 2 1