GCD調度組的使用

生詞表

 1.dispatch 調度
 2. queue   隊列
 3. sync     同步
 4. async   異步
 5. DISPATCH_QUEUE_CONCURRENT 并發(fā)
 6. DISPATCH_QUEUE_SERIAL 串行

使用場景

在實際開發(fā)中,需要開啟N個異步線程,但是后續(xù)操作,需要依賴N個線程返回的數(shù)據(jù),需要接收所有線程任務執(zhí)行完成的通知焦读。

常規(guī)用法

/**
 調度組-在一組異步代碼執(zhí)行完畢后子库,統(tǒng)一獲得通知
 */
- (void)group1 {

    // 1. 調度組
    dispatch_group_t group = dispatch_group_create();

    // 2. 隊列
    dispatch_queue_t q = dispatch_get_global_queue(0, 0);

    // 3. 將任務添加到隊列和調度組
    dispatch_group_async(group, q, ^{
        [NSThread sleepForTimeInterval:1.0]; 
        NSLog(@"任務 1 %@", [NSThread currentThread]);
    });
    dispatch_group_async(group, q, ^{
        NSLog(@"任務 2 %@", [NSThread currentThread]);
    });
    dispatch_group_async(group, q, ^{
        NSLog(@"任務 3 %@", [NSThread currentThread]);
    });

    // 4. 監(jiān)聽所有任務完成
    dispatch_group_notify(group, q, ^{
        NSLog(@"OVER %@", [NSThread currentThread]);
    });

    // 5. 判斷異步
    NSLog(@"come here");
}

注:dispatch_group_notify這個函數(shù)是異步的,如果要換成同步dispatch_group_wait(group, DISPATCH_TIME_FOREVER).群組不空矗晃,這句代碼一直等仑嗅,下面代碼不執(zhí)行

enter & leavel

dispatch_group_enter(group)函數(shù)內(nèi)部實現(xiàn)原理

終端輸入:**man dispatch_group_enter **
連續(xù)兩個空格

void dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block)
{
    dispatch_retain(group);
    dispatch_group_enter(group);
    dispatch_async(queue, ^{
        block();
        dispatch_group_leave(group);
        dispatch_release(group);
    });
}
dispatch_group_leave(group)函數(shù)
  • 必須和dispatch_group_enter(group)成對出現(xiàn)
  • 必須在block的最后一句

特殊場景下用法

- (void)group2 {
    // 隊列
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    // 調度組
    dispatch_group_t group = dispatch_group_create();
    
    // 1. 進入群組,給 group 打一個標記张症,在后續(xù)緊接著的 block 歸 group 監(jiān)聽
    // dispatch_group_enter 和 dispatch_group_leave 必須成對出現(xiàn)仓技!
    dispatch_group_enter(group);
    dispatch_async(queue, ^{
        [NSThread sleepForTimeInterval:10];
        NSLog(@"download A - %@", [NSThread currentThread]);
        // 耗時操作代碼

        // 2. 離開群組
        dispatch_group_leave(group);
    });
    
    dispatch_group_enter(group);
    dispatch_async(queue, ^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"download B - %@", [NSThread currentThread]);
        // 耗時操作代碼

        // 2. 離開群組
        dispatch_group_leave(group);
    });
    
    // 等待群組空,一直到永遠俗他,群組不空脖捻,這句代碼就死等,同步
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
    NSLog(@"OK");
}

注:同樣最后等待群組的通知兆衅,也可以換成異步的地沮,,參考常規(guī)寫法用例

  • 待補充羡亩。摩疑。。
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畏铆,一起剝皮案震驚了整個濱河市雷袋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辞居,老刑警劉巖楷怒,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寨腔,死亡現(xiàn)場離奇詭異,居然都是意外死亡率寡,警方通過查閱死者的電腦和手機迫卢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冶共,“玉大人乾蛤,你說我怎么就攤上這事⊥苯” “怎么了家卖?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長庙楚。 經(jīng)常有香客問我上荡,道長,這世上最難降的妖魔是什么馒闷? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任酪捡,我火速辦了婚禮,結果婚禮上纳账,老公的妹妹穿的比我還像新娘逛薇。我一直安慰自己,他們只是感情好疏虫,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布永罚。 她就那樣靜靜地躺著,像睡著了一般卧秘。 火紅的嫁衣襯著肌膚如雪呢袱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天翅敌,我揣著相機與錄音羞福,去河邊找鬼。 笑死哼御,一個胖子當著我的面吹牛坯临,可吹牛的內(nèi)容都是我干的焊唬。 我是一名探鬼主播恋昼,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赶促!你這毒婦竟也來了液肌?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤鸥滨,失蹤者是張志新(化名)和其女友劉穎嗦哆,沒想到半個月后谤祖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡老速,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年粥喜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橘券。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡额湘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出旁舰,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布寿羞,位于F島的核電站嘹狞,受9級特大地震影響,放射性物質發(fā)生泄漏磺樱。R本人自食惡果不足惜纳猫,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望竹捉。 院中可真熱鬧续担,春花似錦、人聲如沸活孩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽憾儒。三九已至询兴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間起趾,已是汗流浹背诗舰。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留训裆,地道東北人眶根。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像边琉,于是被迫代替她去往敵國和親属百。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

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