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_t group = dispatch_group_create();
    /*
     1.封装任务
     2.把任务加到队列
     3.会监听任务的执行情况
     */
    dispatch_group_async(group, globalqueue, ^{
        NSLog(@"1111---%@---", [NSThread currentThread]);
    });

    dispatch_group_async(group, globalqueue, ^{
        NSLog(@"22222---%@---", [NSThread currentThread]);
    });

    dispatch_group_async(group, globalqueue, ^{
        NSLog(@"333---%@---", [NSThread currentThread]);
    });

    // 一定要加上这行,不然不起任何作用
    dispatch_group_notify(group, globalqueue, ^{
        NSLog(@"完成----4444---%@---", [NSThread currentThread]);
    });

    /*
     打印结果:
     2018-06-28 10:18:44.191407+0800 5线程操作-GCD-快速迭代[7808:56262] 333---<NSThread: 0x6000002682c0>{number = 4, name = (null)}---
     2018-06-28 10:18:44.191409+0800 5线程操作-GCD-快速迭代[7808:56266] 1111---<NSThread: 0x608000075300>{number = 3, name = (null)}---
     2018-06-28 10:18:44.191434+0800 5线程操作-GCD-快速迭代[7808:56264] 22222---<NSThread: 0x600000266580>{number = 5, name = (null)}---
     2018-06-28 10:18:44.191758+0800 5线程操作-GCD-快速迭代[7808:56264] 完成----4444---<NSThread: 0x600000266580>{number = 5, name = (null)}---
     */
}
//老式写法
- (void)GCD_GroupDemo_old___enter_leave{
    dispatch_queue_t queue = dispatch_queue_create("11", DISPATCH_QUEUE_CONCURRENT);
    dispatch_queue_t globalqueue = dispatch_get_global_queue(0, 0);
    dispatch_group_t group = dispatch_group_create();
    dispatch_group_enter(group);

    // 旧 写法
    dispatch_group_async(group, globalqueue, ^{
        NSLog(@"离开---%@---", [NSThread currentThread]);
        dispatch_group_leave(group);
    });
    dispatch_group_async(group, globalqueue, ^{
        NSLog(@"222---%@---", [NSThread currentThread]);
    });
    dispatch_group_async(group, globalqueue, ^{
        NSLog(@"333---%@---", [NSThread currentThread]);
    });

    dispatch_group_async(group, globalqueue, ^{
        NSLog(@"111---%@---", [NSThread currentThread]);
    });
    /*
     2018-06-28 10:25:06.997243+0800 5线程操作-GCD-快速迭代[7942:62493] 离开---<NSThread: 0x60c00007f8c0>{number = 3, name = (null)}---
     2018-06-28 10:25:06.997286+0800 5线程操作-GCD-快速迭代[7942:62491] 333---<NSThread: 0x60800007d240>{number = 5, name = (null)}---
     2018-06-28 10:25:06.997306+0800 5线程操作-GCD-快速迭代[7942:62489] 111---<NSThread: 0x608000260c80>{number = 6, name = (null)}---
     2018-06-28 10:25:06.997287+0800 5线程操作-GCD-快速迭代[7942:62492] 222---<NSThread: 0x60c00007de40>{number = 4, name = (null)}---
     */
}

原文地址:https://www.cnblogs.com/qingzZ/p/9237427.html

时间: 2024-12-10 14:21:31

OC 线程操作 - GCD队列组的相关文章

GCD线程依赖,GCD队列组,线程监听,线程等待

1.线程监听 有时候经常有这样的需求,AB任务都执行完成之后,刷新界面或者执行其他操作, /** * 队列组 dispatch_group_notify */ - (void)groupNotify { NSLog(@"begin"); dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORIT

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

多线程 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)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self downloadImage]; } -(void)downloadImage{ dispatch_group_t group = dispatch_group_create(); dispatch_queue_t queue = dispatch_get_global_queue(0, 0); dispatch_group_asy

OC 线程操作3 - NSOperation 实现线程间通信

1 #import "ViewController.h" 2 3 @interface ViewController () 4 5 /** 6 图片 7 */ 8 @property (weak, nonatomic) IBOutlet UIImageView *imageView; 9 10 @end 11 12 @implementation ViewController 13 - (void)touchesBegan:(NSSet<UITouch *> *)touch

猫猫学iOS(五十一)多线程网络之GCD下载合并图片_队列组的使用

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 合并图片(图片水印)第一种方法 效果 实现: 思路: 1.分别下载2张图片:大图片.LOGO 2.合并2张图片 3.显示到一个imageView身上 // 异步下载 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

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

创建线程方式-GCD

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute

GCD队列的注意事项

队列中存放的任务最后都要由线程来执行! 队列的原则:先进先出,后进后出(FIFO/ First In First Out)! 队列的类型: <</span>1> '串行'队列:(Serial Dispatch Queue) 存放按顺序执行的任务!(一个任务执行完毕,再执行下一个任务) 注意两个非常常用的特殊队列 <</span>1> 主队列: // UI 操作放在主队列中执行! 跟主线程相关联的队列! 主队列是 GCD 自带的一种特殊的串行队列! 主队列中的