GCD常用方法

1.創(chuàng)建異步線(xiàn)程

NSLog(@"hello world 1");
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        sleep(1);
        NSLog(@"hello world 2");
    });
    NSLog(@"hello world 3");
屏幕快照 2017-09-28 下午3.11.55.png

2.創(chuàng)建同步線(xiàn)程

NSLog(@"hello world 1");
    dispatch_sync(dispatch_get_global_queue(0, 0), ^{
        sleep(1);
        NSLog(@"hello world 2");
    });
    NSLog(@"hello world 3");
屏幕快照 2017-09-28 下午3.11.27.png

3.創(chuàng)建主線(xiàn)程

dispatch_async(dispatch_get_main_queue(), ^{
        //刷新界面代碼
    });

4.GCD只執(zhí)行一次

static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        //只執(zhí)行一次代碼
    });

5.線(xiàn)程延遲調(diào)用

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

        NSLog(@"## 在主線(xiàn)程延遲5秒調(diào)用 ##");
    });

6.信號(hào)量

dispatch_semaphore_create //創(chuàng)建一個(gè)semaphore 通過(guò)dispatch_semaphore_create 函數(shù)創(chuàng)建一個(gè)Semaphore并初始化信號(hào)的總量。

dispatch_semaphore_signal //發(fā)送一個(gè)信號(hào) 通過(guò)dispatch_semaphore_signal 函數(shù)發(fā)送一個(gè)信號(hào),讓信號(hào)總量加1。

dispatch_semaphore_wait  //等待信號(hào) 通過(guò)dispatch_semaphore_wait可以使總信號(hào)量減1,當(dāng)信號(hào)總量為0時(shí)就會(huì)一直等待,否則就可以正常執(zhí)行

dispatch_semaphore_t semaoh = dispatch_semaphore_create(0);
dispatch_async(dispatch_get_global_queue(0, 0), ^{
       //獲取數(shù)據(jù)  執(zhí)行信號(hào)數(shù)量+1
        dispatch_semaphore_signal(semaoh);
    });
//使總信號(hào)量減1
dispatch_semaphore_wait(semaoh, DISPATCH_TIME_FOREVER);

7.多個(gè)請(qǐng)求都結(jié)束后,在執(zhí)行界面刷新

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        
        //創(chuàng)建組
        dispatch_group_t group=dispatch_group_create();
        
        // 關(guān)聯(lián)一個(gè)任務(wù)到group
        dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            //任務(wù)一
            NSLog(@"******執(zhí)行任務(wù)一******");
        });
        
        // 關(guān)聯(lián)一個(gè)任務(wù)到group
        dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            //任務(wù)二
            NSLog(@"******執(zhí)行任務(wù)二******");
        });
        
        // 等待組中的任務(wù)執(zhí)行完畢,回到主線(xiàn)程執(zhí)行block回調(diào)
        dispatch_group_notify(group, dispatch_get_main_queue(), ^{
            //任務(wù)三 回到主線(xiàn)程刷新界面
            dispatch_async(dispatch_get_main_queue(), ^{
            //刷新界面代碼
    });
    });

8. dispatch_barrier_async的使用

dispatch_barrier_async是在前面的任務(wù)執(zhí)行結(jié)束后它才執(zhí)行,而且它后面的任務(wù)等它執(zhí)行完成之后才會(huì)執(zhí)行

dispatch_queue_t queue = dispatch_queue_create("create_asy_queue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
        NSLog(@"任務(wù)一");
    });
    dispatch_async(queue, ^{
        NSLog(@"任務(wù)二");
    });
    dispatch_barrier_async(queue, ^{
        NSLog(@"dispatch_barrier_async");
        //FIXEM:任務(wù)一和二都執(zhí)行完了,才執(zhí)行
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"刷新界面");
        });
        
    });
    dispatch_async(queue, ^{
        //FIXEM:界面刷新完了,才執(zhí)行
        [NSThread sleepForTimeInterval:1];
        NSLog(@"任務(wù)三");
    });
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • GCD是異步執(zhí)行任務(wù)的技術(shù)支之一,開(kāi)發(fā)者只需要將想要執(zhí)行的block任務(wù)添加到適當(dāng)?shù)腄ispatch Queue(...
    zziazm閱讀 1,851評(píng)論 0 8
  • 一、多線(xiàn)程簡(jiǎn)介: 所謂多線(xiàn)程是指一個(gè) 進(jìn)程 -- process(可以理解為系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序)中可以開(kāi)...
    尋形覓影閱讀 1,189評(píng)論 0 6
  • 鎖是一種同步機(jī)制,用于多線(xiàn)程環(huán)境中對(duì)資源訪(fǎng)問(wèn)的限制iOS中常見(jiàn)鎖的性能對(duì)比圖(摘自:ibireme): iOS鎖的...
    LiLS閱讀 1,644評(píng)論 0 6
  • 個(gè)人簡(jiǎn)介 1989年,生于黑龍江省的一個(gè)小縣城——東寧縣,第二次世界大戰(zhàn)的最后戰(zhàn)場(chǎng)以及亞洲最大的日本軍事要塞所在地...
    峰_留學(xué)閱讀 357評(píng)論 1 0
  • 青春歲月太過(guò)奇妙,它可以使原本形影不離的青梅竹馬形同陌路,也可以使萍水相逢的陌路人情投意合。 梁舟是我從小玩到大的...
    涼茶不良閱讀 412評(píng)論 0 2

友情鏈接更多精彩內(nèi)容