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
时间: 2024-08-09 10:44:43

GCD-调度组的相关文章

ios多线程操作(八)—— GCD调度组

有这么一个需要,分别执行2个耗时的异步操作,等2个异步操作都执行完毕后在回到主线程执行操作.如果想要快速高效地实现这个需求,可以考虑使用调度组. 调度组的创建代码如下: [objc] view plain copy dispatch_group_t group = dispatch_group_create(); 往调度组里面添加任务的函数如下: [objc] view plain copy dispatch_group_async(dispatch_group_t group, dispatc

多线程CGD调度组原理

我们常用的GCD调度组方式 1 //GCD常用调度组写法 2 -(void)demo1{ 3 4 //创建调度组和队列 5 dispatch_group_t group = dispatch_group_create(); 6 dispatch_queue_t queue = dispatch_queue_create("ChangYong", DISPATCH_QUEUE_CONCURRENT); 7 8 //将任务添加到调度组 9 dispatch_group_async(grou

[第2章]多线程:GCD的简单使用(2)——调度组

接着上篇 Dispatch Groups 介绍 Grouping blocks allows for aggregate synchronization. Your application can submit multiple blocks and track when they all complete, even though they might run on different queues. This behavior can be helpful when progress can

多线程基础(七)GCD线程组+栅栏函数

1.GCD队列组 拦截通知和等待所有任务全部结束在继续往下执行|阻塞 需求:下载两张图片,等两张图片都下载完毕之后,合成图片(这个实例额外补充) 官方规定了,栅栏函数 只能用在并发队列中,不能使用在全局并发队列中

GCD线程组

一.继续前前导入GCD.h - (void)GCDGroup { // 创建线程组 GCDGroup *group = [GCDGroupnew]; //让线程在group 中执行(线程1) [[[GCDQueuealloc] initConcurrent] execute:^{ sleep(1); NSLog(@"1"); }inGroup:group]; //让线程在group 中执行(线程2) [[[GCDQueuealloc] initConcurrent] execute:^

iOS多线程开发小demo7 GCD队列组

// DYFViewController.m // 623-08-队列组 // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @property (weak, nonatomic) IBOutlet UIImageVi

[Swift4.2互动教程]七、常见概念-(12)使用DispatchGroup(调度组)管理线程数组

本文将为你演示调度组的使用,使用调度组可以将多个线程中的人物进行组合管理,可以设置当多个相同层次的任务完成之后,再执行另一项任务. 首先导入需要使用的界面工具框架 import UIKit 在控制台输出一条日志语句,表示调试任务开始执行 print("Start the task and display teh Loading animation.") 接着初始化一个调度组对象. let gro =DispatchGroup() 同时运行多个任务,每个任务的启动时间是按照加入队列的顺序

用GCD线程组与GCD信号量将异步线程转换为同步线程

有时候我们会碰到这样子的一种情形: 同时获取两个网络请求的数据,但是网络请求是异步的,我们需要获取到两个网络请求的数据之后才能够进行下一步的操作,这个时候,就是线程组与信号量的用武之地了. 线程组用以监听线程的执行情况,而信号量就是用来将异步线程转化为同步线程. 以下是打印的数据: 2015-02-25 18:34:23.208 YXMWeather[265:8748] 请求1数据 2015-02-25 18:34:23.209 YXMWeather[265:8790] 1信号量结束 2015-

多线程 GCD队列组

//  DYFViewController.m //  623-08-队列组 // //  Created by dyf on 14-6-23. //  Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @property (weak, nonatomic) IBOutlet UIIma

OC 线程操作 - GCD队列组

队列组两种使用方 /** 新方法 队列组一般用在在异步操作,在主线程写队列组毫无任何作用 */ - (void)GCD_Group_new_group___notify{ dispatch_queue_t queue = dispatch_queue_create("11", DISPATCH_QUEUE_CONCURRENT); dispatch_queue_t globalqueue = dispatch_get_global_queue(0, 0); dispatch_group