美文网首页
iOS GCD dispatch_group_t的使用

iOS GCD dispatch_group_t的使用

作者: 出来遛狗了 | 来源:发表于2020-04-21 16:21 被阅读0次

dispatch_group_t所使用的的方法

dispatch_group_create(); //创建一个线程组
dispatch_group_async(group, queue, ^{//将block任务添加到queue队列,并被group组管理
}); 
dispatch_group_enter(group); // 下面的任务交给线程组管理
    dispatch_async(queue, ^{
        sleep(1);
        NSLog(@"6");
        dispatch_group_leave(group); // 任务完成,线程组任务 -1
    });
dispatch_group_wait(group, DISPATCH_TIME_FOREVER); // 等待线程组任务完成才会执行下面的代码,功能有点类似 dispatch_group_notify
NSLog(@"123");
dispatch_group_notify(group, queue, ^{ // 线程组任务全部执行完毕的通知
        NSLog(@"5");
    });

下面是一个例子

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
    
    dispatch_group_async(group, queue, ^{
        sleep(1);
        
        NSLog(@"1");
    });
    dispatch_group_async(group, queue, ^{
        sleep(1);
        NSLog(@"2");
    });
    
    dispatch_group_async(group, queue, ^{
        sleep(1);
        NSLog(@"3");
    });
    dispatch_group_async(group, queue, ^{
        sleep(1);
        NSLog(@"4");
    });
    dispatch_group_enter(group);
    dispatch_async(queue, ^{
        sleep(1);
        NSLog(@"6");
        dispatch_group_leave(group);
    });
    
    dispatch_group_enter(group);
    dispatch_async(queue, ^{
        sleep(1);
        NSLog(@"7");
        dispatch_group_leave(group);
    });

    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
    NSLog(@"123");
    dispatch_group_notify(group, queue, ^{
        NSLog(@"5");
    });

打印结果


image.png

相关文章

网友评论

      本文标题:iOS GCD dispatch_group_t的使用

      本文链接:https://www.haomeiwen.com/subject/xzxpihtx.html