【iOS開發(fā)】多線程 - GCD

GCD(Grand Central Dispatch)俗稱大中樞派發(fā)

  • 線程改進示意圖
改進的線程
  • dispatch_queue_t 示意圖
dispatch_queue_t

  • 隊列
dispatch_queue_t queue
  • 創(chuàng)建隊列
//第一個參數(shù)為隊列名,第二個參數(shù)為串行或者并行
dispatch_queue_t queue = dispatch_queue_create("com.huangbaoqin.GCDQueue", DISPATCH_QUEUE_CONCURRENT);
  • 使用隊列
dispatch_queue_t queue = dispatch_queue_create("com.huangbaoqin.GCDQueue", DISPATCH_QUEUE_CONCURRENT); 
// 異步
dispatch_async(queue, ^{
    // do something
});
// 同步(必須執(zhí)行完都something之后才會執(zhí)行dispatch_sync之后的代碼)
dispatch_sync(queue, ^{
    // do something
});

  • dispatch queue 的種類

    • Main Dispatch Queue
      • 有且只有一個
      • 里面所有的任務(wù)都是要在主線程中執(zhí)行
    • Serial Queue


    • Concurrent Queue


  • 一些內(nèi)置的Queue

// #define DISPATCH_QUEUE_PRIORITY_HIGH 2
// #define DISPATCH_QUEUE_PRIORITY_DEFAULT 0
// #define DISPATCH_QUEUE_PRIORITY_LOW (-2)
// #define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
  • dispatch_affter
// 不能取消
void
dispatch_after(dispatch_time_t when,
    dispatch_queue_t queue,
    dispatch_block_t block);

  • GCD中的線程安全
dispatch_async(_queue, ^{
    self.a ++;
})
  • 死鎖

  • dispatch_once

多線程下單例產(chǎn)生兩個對象
+ (instancetype)sharedObj {
    static singleOBJ *instance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[singleOBJ alloc] init];
    });
    return instance;
}
  • dispatch_semaphore_t 信號量惑折,控制并發(fā)數(shù)

  • dispatch_group_t

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    //  把Queue中的任務(wù)統(tǒng)一放到group中處理授账,在后臺線程中等待group處理完成后切換到主線程操作UI

    _imageView1.image = nil;
    _imageView2.image = nil;
    _imageView3.image = nil;
    _imageView4.image = nil;
    __block UIImage *image1, *image2, *image3, *image4 = nil;
    
    dispatch_group_t group = dispatch_group_create();

    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        image1 = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url1]]];
    });
    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        image2 = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url2]]];
    });
    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        image3 = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url3]]];
    });
    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        image4 = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url4]]];
    });
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
        dispatch_async(dispatch_get_main_queue(), ^{
            _imageView1.image = image1;
            _imageView2.image = image2;
            _imageView3.image = image3;
            _imageView4.image = image4;
        });
    });
}
最后編輯于
?著作權(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é)果婚禮上,老公的妹妹穿的比我還像新娘洒扎。我一直安慰自己辑甜,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布袍冷。 她就那樣靜靜地躺著磷醋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胡诗。 梳的紋絲不亂的頭發(fā)上邓线,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音煌恢,去河邊找鬼骇陈。 笑死,一個胖子當(dāng)著我的面吹牛瑰抵,可吹牛的內(nèi)容都是我干的你雌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼二汛,長吁一口氣:“原來是場噩夢啊……” “哼婿崭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起习贫,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤逛球,失蹤者是張志新(化名)和其女友劉穎千元,沒想到半個月后苫昌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年祟身,在試婚紗的時候發(fā)現(xiàn)自己被綠了奥务。 大學(xué)時的朋友給我發(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
  • 正文 我出身青樓厕倍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贩疙。 傳聞我的和親對象是個殘疾皇子讹弯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

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