首页 > 代码库 > GCD-调度组

GCD-调度组

代码比较简单就不放在git上了,直接粘出来。

/*
 在iOS开发中,我们经常需要需要监听多个异步任务全部完成后的回调。此时需要用到调度组处理
 场景:使用异步下载多张图片的时候,可能需要下载完成全部图片后才能计算image的高宽来布局页面。等等
 */

#import "ViewController.h"
@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    
#warning 注意事项:
    /*
        1.dispatch_group_enter(group) 与dispatch_group_leave(group) 必须配对使用!!!
        2.如果 dispatch_group_leave(group) 配对少了一个,则dispatch_group_notify 将永远的等待下去不走回调
        3.如果 dispatch_group_enter(group) 配对少了一个,则会造成程序的crash
     */
    
    //1>创建一个调度组
    dispatch_group_t group = dispatch_group_create();
    
    //2.使用调度组
    dispatch_group_enter(group);
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSLog(@"%@  --- 执行了任务1",[NSThread currentThread]);
        dispatch_group_leave(group);
    });
    
    dispatch_group_enter(group);
    dispatch_async(dispatch_queue_create("111", DISPATCH_QUEUE_CONCURRENT), ^{
        NSLog(@"%@  --- 执行了任务2",[NSThread currentThread]);
        dispatch_group_leave(group);
    });
    
    //3>调度组监听,监听结果在设置的dispatch_get_main_queue 中回调
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"%@  --- 监听到了任务全部执行完毕",[NSThread currentThread]);
    });

}

@end

 

GCD-调度组