000-调度组

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

你可能感兴趣的:(000-调度组)