iOS开发之GCD总结

直接贴出常用的函数,方便要用的时候直接使用。

-------------     type 1 ----------------

说明  :

创建一个dispatch_group_t,每次网络请求前先dispatch_group_enter,请求回调后再dispatch_group_leave,对于enter和leave必须配合使用,有几次enter就要有几次leave,否则group会一直存在。当所有enter的group都leave后,会执行dispatch_group_notify的block

dispatch_group_t downLoadGroup = dispatch_group_create();
        dispatch_group_enter(downLoadGroup);       
        dispatch_group_leave(downLoadGroup);      
        dispatch_group_notify(downLoadGroup, dispatch_get_main_queue(), ^{
            NSLog(@"回到主线程通知");
        });

  

-------------     type 2 ----------------

说明 :

延迟方法

double delayInSeconds = 3;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            NSLog(@"主线程中延迟方法执行回调");
        });

  

-------------     type 3 ----------------

说明 :

等待之前的线程结束(会阻塞线程,慎用)

dispatch_group_t waitGroup = dispatch_group_create();
        dispatch_group_wait(waitGroup, DISPATCH_TIME_FOREVER);

  

-------------     type 4 ----------------

说明 :

开启异步线程 -- 

会创建group  在所有线程执行完成之后会执行notify block   注意:notify要放在最后。

dispatch_group_t group = dispatch_group_create();
    dispatch_queue_t queue = dispatch_queue_create("com.gcd-group.www", DISPATCH_QUEUE_CONCURRENT);   
    dispatch_group_async(group, queue, ^{
        for (int i = 0; i < 1000000000; i++) {
            if (i == 999999999) {
                NSLog(@"11111111");
            }
        }
    });
    
    dispatch_group_async(group, queue, ^{
        NSLog(@"22222222");
    });
    
    dispatch_group_async(group, queue, ^{
        NSLog(@"33333333");
    });
    
    dispatch_group_notify(group, queue, ^{
        NSLog(@"done");
    });

-------------     type 5 ----------------

说明 :

开启异步线程  

dispatch_queue_t concurrentDiapatchQueue=dispatch_queue_create("com.test.queue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(concurrentDiapatchQueue, ^{
        NSLog(@"1");
    });
    dispatch_async(concurrentDiapatchQueue, ^{
        sleep(2);
        NSLog(@"2");
    });
    dispatch_async(concurrentDiapatchQueue, ^{
        sleep(1);
        NSLog(@"3");
    });

-------------     type 6 ----------------

说明 :

开启同步线程

    dispatch_queue_t serialDiapatchQueue=dispatch_queue_create("com.test.queue", DISPATCH_QUEUE_SERIAL);
 
    dispatch_async(serialDiapatchQueue, ^{
        NSLog(@"1");
    });
    
    dispatch_async(serialDiapatchQueue, ^{
        NSLog(@"2");
        sleep(2);
        NSLog(@"2-------");
    });
    
    dispatch_async(serialDiapatchQueue, ^{
        NSLog(@"3");
        sleep(2);
        NSLog(@"3--------");
    });

  

-------------     type 7 ----------------

说明 :

GCD的栅栏方法 dispatch_barrier_async

dispatch_queue_t queue = dispatch_queue_create("12312312", DISPATCH_QUEUE_CONCURRENT);
    
    dispatch_async(queue, ^{
        NSLog(@"----1---");
    });
    dispatch_async(queue, ^{
        NSLog(@"----2----");
    });
    
    dispatch_barrier_async(queue, ^{
        NSLog(@"----barrier----");
    });
    
    dispatch_async(queue, ^{
        NSLog(@"----3-----");
    });
    dispatch_async(queue, ^{
        NSLog(@"----4-----");
    });
    dispatch_async(queue, ^{
        NSLog(@"----5-----");
    });
    dispatch_async(queue, ^{
        NSLog(@"----6-----");
    });

多线程的链接:http://www.cocoachina.com/ios/20170707/19769.html

原文地址:https://www.cnblogs.com/110-913-1025/p/7997790.html