1、应用场景:调度组一般用于,执行有先后顺序的操作中
- 本例需求如下:在异步下载完成任务A 和 任务B后在执行任务C
//
// ViewController.m
// 2-调度组
//
// Created by 紫荆秋雪 on 17/2/3.
// Copyright © 2017年 Revan. All rights reserved.
// 调度组:在任务A和任务B都完成以后再执行‘监听方法’
// 使用于:有先后顺序的任务
/**
1.调度组没有任务,直接执行 notify
2.入组 多于 出租,notify 永远不会执行,因为组永远不会为空
3.出组 多于 入组,会崩溃
*/
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self group];
}
- (void)group {
// 1.创建调度组
dispatch_group_t group = dispatch_group_create();
// 2.队列
dispatch_queue_t q = dispatch_get_global_queue(0, 0);
// 3.调度组
// 1> 入组
dispatch_group_enter(group);
dispatch_async(q, ^{
// 下载任务
[NSThread sleepForTimeInterval:2.0];
NSLog(@"downlaod 任务A %@", [NSThread currentThread]);;
// 2> 出租
dispatch_group_leave(group);
});
// 2> 入组
dispatch_group_enter(group);
dispatch_async(q, ^{
// 下载任务
NSLog(@"downlaod 任务B %@", [NSThread currentThread]);
// 出租
dispatch_group_leave(group);
});
// 监听
dispatch_group_notify(group, q, ^{
NSLog(@"come here 任务C %@", [NSThread currentThread]);
});
}
@end