IOS开发-GCD调度组

  应用场景:

     开发的时候,有的时候出现多个网络请求都完成以后(每一个网络请求的事件长短不一定),再统一通知用户 

     比如: 下载小说:三国演义, 红楼梦, X

- (void)group
{
    //1.实例化一个调度组
    dispatch_group_t group = dispatch_group_create();
    
    //2.拿到全局队列
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    
    //3.添加任务到queue
    dispatch_group_async(group, queue, ^{
        NSLog(@"下载小说A----%@",[NSThread currentThread]);
    });
    dispatch_group_async(group, queue, ^{
        NSLog(@"下载小说B----%@",[NSThread currentThread]);
    });
    dispatch_group_async(group, queue, ^{
        NSLog(@"下载小说C----%@",[NSThread currentThread]);
    });
    
    //获得所有调度组里面的异步任务完成的通知
    dispatch_group_notify(group, queue, ^{
        NSLog(@"下载完成,请观看 %@",[NSThread currentThread]);
    });
    
    
}

执行结果:

2016-03-13 11:39:28.877 GCD其它使用[3363:42773] 下载小说C----<NSThread: 0x7fdd2af18cd0>{number = 4, name = (null)}
2016-03-13 11:39:28.877 GCD其它使用[3363:42772] 下载小说B----<NSThread: 0x7fdd2ae08d70>{number = 3, name = (null)}
2016-03-13 11:39:28.877 GCD其它使用[3363:42771] 下载小说A----<NSThread: 0x7fdd2ac0be20>{number = 2, name = (null)}
2016-03-13 11:39:28.879 GCD其它使用[3363:42771] 下载完成,请观看 <NSThread: 0x7fdd2ac0be20>{number = 2, name = (null)}

也可以跨队列通信

- (void)group
{
    //1.实例化一个调度组
    dispatch_group_t group = dispatch_group_create();
    
    //2.拿到全局队列
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    
    //3.添加任务到queue
    dispatch_group_async(group, queue, ^{
        NSLog(@"下载小说A----%@",[NSThread currentThread]);
    });
    dispatch_group_async(group, queue, ^{
        NSLog(@"下载小说B----%@",[NSThread currentThread]);
    });
    dispatch_group_async(group, queue, ^{
        NSLog(@"下载小说C----%@",[NSThread currentThread]);
    });
    
    //获得所有调度组里面的异步任务完成的通知
//    dispatch_group_notify(group, queue, ^{
//        NSLog(@"下载完成,请观看 %@",[NSThread currentThread]);
//    });
    

    //注意点:在调度组完成通知里,可以跨队列通信
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"下载完成,请观看 %@",[NSThread currentThread]);
    });
}

执行结果:通知在主线程中被执行

2016-03-13 11:41:52.426 GCD其它使用[3374:44262] 下载小说C----<NSThread: 0x7f9298c9a7f0>{number = 4, name = (null)}
2016-03-13 11:41:52.426 GCD其它使用[3374:44263] 下载小说A----<NSThread: 0x7f9298d0bee0>{number = 3, name = (null)}
2016-03-13 11:41:52.426 GCD其它使用[3374:44261] 下载小说B----<NSThread: 0x7f9298f0e270>{number = 2, name = (null)}
2016-03-13 11:41:52.431 GCD其它使用[3374:44224] 下载完成,请观看 <NSThread: 0x7f9298d00160>{number = 1, name = main}


你可能感兴趣的:(IOS开发-GCD调度组)