ios-UI高级 GCD队列组合成图片

【iOS】多线程问题总结--GCD 在 iOS 开发过程中,我们一般在主线程里边进行 UI 刷新,例如:点击、滚动、拖拽等事件。我们通常把一些耗时的操作放在其他线程,比如说图片下载、文件上传等耗时操作。而当我们有时候在其他线程完成了耗时操作时,需要回到主线程,那么就用到了线程之间的通讯。 阅读详情

#import "ViewController.h"


@interface ViewController ()


//这个imageView是storyBoard里面的

@property (weak, nonatomic) IBOutletUIImageView *GruopImageView; 

//这两个是自定义的Image

@property (nonatomic,strong)UIImage *image1;

@property (nonatomic,strong)UIImage *image2;


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    

}


-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

    dispatch_group_t group =dispatch_group_create();

    

    dispatch_group_async(group, queue, ^{

        //获得image1的图片地址

        NSURL *image1Url = [NSURLURLWithString:@"http://f.hiphotos.baidu.com/image/pic/item/3812b31bb051f8196bc52fa8dfb44aed2f73e774.jpg"];

        //加载image1

        NSData *data1 = [NSDatadataWithContentsOfURL:image1Url];

        self.image1= [UIImageimageWithData:data1];

    });

    dispatch_group_async(group, queue, ^{

        //获得image2的图片地址

        NSURL *image2Url = [NSURLURLWithString:@"http://photocdn.sohu.com/20151124/mp43786429_1448294862260_4.jpeg"];

        //加载image2

        NSData *data2 = [NSDatadataWithContentsOfURL:image2Url];

        self.image2= [UIImageimageWithData:data2];

    });

    //合成image1和image2(notify的作用是当它前面的都执行完才执行它)

    dispatch_group_notify(group, queue, ^{

        //开启上下文

        UIGraphicsBeginImageContext(CGSizeMake(200, 200));

        

        [self.image1drawInRect:CGRectMake(0, 0, 100, 200)];

        [self.image2drawInRect:CGRectMake(100, 0, 100, 200)];

        

        //获得上下文

        UIImage *image =UIGraphicsGetImageFromCurrentImageContext();

        

        //结束上下文

        UIGraphicsEndImageContext();

        //回到主队列

        dispatch_async(dispatch_get_main_queue(), ^{

            self.GruopImageView.image = image;

        });

        

    });


}


- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


运行效果:


深入理解GCD与操作队列:UI与非UI任务的执行 本文详细介绍了如何利用操作队列和Grand Central Dispatch (GCD)在应用程序中执行同步和异步任务。介绍了不同类型的可可操作、操作队列的管理以及操作对象之间的依赖性。同时,特别强调了在主线程中执行UI任务的重要性,并通过代码示例展示了如何在主线程和并发队列中安全地执行任务。 阅读详情

相关推荐

ArcGIS-裁剪遥感影像及dem图像

6、选择【工具箱】-【数据管理工具】-【栅格】-【裁剪】。在【输入栅格】里选择要裁剪的dem,在【输出范围】里选择刚创建的裁剪范围。选择一个输出路径,其他参数保存默认。2、起一个名称,要素类型选择【面】。点击【编辑】选择与要裁剪的dem一致的地理坐标系。1、创建需要裁剪区域的面层shp,右击选择【新建】-【shapefile】3、点击编辑器,选择开始编辑。4、选择【裁剪范围】,点击确定。5、画出想要裁剪的范围并保存。

siwenaiyou的博客 1万+

iOS网络串行队列之图片上传

需求分析多张图片上传,依次上传,网络请求依赖关系。创建队列创建队列一个队列 // 创建一个队列 NSOperationQueue *queue = [[NSOperationQueue alloc]init]; // 设置最大线程数 queue.maxConcurrentOperationCount = 1;创建任务创建任务、并添加依赖关系一下下是我以多张图片上传为列() //创建一个队

dingqk的博客 2387

别再只会regress了!用Stata的csdid命令搞定多期DID的完整实操指南

本文详细介绍了如何在Stata中使用csdid命令进行多期DID分析,解决传统DID方法在交错处理场景下的局限性。通过完整的实操指南,包括环境搭建、核心语法、结果解读和高阶应用,帮助研究者更准确地评估政策效果,适用于计量经济学和实证研究领域。

weixin_30236595的博客 582

iOS GCD中队列组的使用--下载并且为图片添加水印

首先说一下我们的需求是这样的,第一步要在服务端下载两张图片,之后把小图片绘制到大图片上去(就是让小图片成为大图片的水印),之后我们通过分析可以知道下载两张图片属于耗时操作,而制作水印的操作相对来说耗时不多,我们有必须把制作水印的操作在下载完成两张图片之后完成(不解释),但是这样虽然在异步线程中完成的,不过,当下载完第一个图的时候,第二个图还没下,在等待,我们想让每一个图都在一个单独的异步线程里面下

will_han 的专栏 1218

LTE信令流程实战:从Attach到Service Request的完整解析(附常见问题排查)

本文深入解析LTE信令流程中的Attach和Service Request关键环节,提供从基础原理到实战排查的完整指南。涵盖鉴权、承载建立等核心步骤,分析常见故障模式及优化方案,并附赠信令跟踪工具使用技巧,助力通信工程师提升网络运维效率。

alpha的博客 319

局域网tcp通信实验

IPv4 地址 . . . . . . . . . . . . : 192.168.92.79。IPv4 地址 . . . . . . . . . . . . : 192.168.92.59。子网掩码 . . . . . . . . . . . . : 255.255.255.0。子网掩码 . . . . . . . . . . . . : 255.255.255.0。使用这篇文章的小工具。

weixin_51883798的博客 433

GCD实现一张一张的传输图片,即传完一张再传另外一张

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {     if (collectionView == self.hotelOrderReviewView.tripTypeCollectionView)     {  

iOS&Android开发 1855

从零开始理解Linux中断架构(1)-前言

前段时间在转行手撸WIFI路由器,搞wifi路由器需要理解网络驱动程序,以太网卡驱动程序,无线WIFI驱动程序,而网卡驱动的关键路径就在中断程序中,需要了解NIC设备驱动程序如何收发数据,为了彻底的知道数据包是如何二层传递上来的,又需要了解一点Linux中断系统。第一次看到这张表是无感的,大概能够看懂的就是那个中断次数,因为不停的cat,这个数值会一直不停的增加。第一列是逻辑中断号,第二三列是中断次数,第四列是中断控制器的名字,第五列是硬件中断号,第六列 中断类型,第七列是 中断源关联设备。

maxleng的专栏 881

iOS开发—使用GCD下载图片

通过一个下载网络图片的案例,展示使用GCD来完成多线程的管理,当图片下载完成后,将图片显示到主线程更新UI,具体步骤如下: 1、新建一个Single View Application 应用,名称为06-GCDDownload; 2、进入Main.StoryBoard,从对象库拖拽一个ImageView到程序界面,用于放置下载后的图片,给Image View设置一个背景颜色,设计好的界面

shichunxue的博客 1986

PCL 点云圆柱形邻域搜索【2026最新版】

圆柱形邻域搜索是KD-tree算法在点云数据处理中的扩展应用,在一些特定场景应用中具有无与伦比的优势。博客长期更新,本文最近一次更新时间为:2026年5月4日。

点云侠的博客 3450

Python 爬虫实战:爬取 Bing 搜索功能链接(国际搜索引擎数据采集技巧)

在当今数字化信息爆炸的时代,搜索引擎已成为我们获取知识、了解世界的得力助手。Bing,作为全球知名的搜索引擎之一,拥有庞大的数据索引和精准的搜索算法。通过 Python 爬虫技术爬取 Bing 搜索区域的链接信息,不仅能帮助我们快速收集大量有价值的数据,还能为后续的数据分析、内容挖掘等任务提供丰富的素材。

yansideyucsdn的博客 1339

iOS面试:4.多线程GCD

进程是指在系统中正在运行的一个应用程序。对于电脑而已,你打开一个软件,就相当于开启了一个进程。对于手机而已,你打开了一个APP,就相当于开启了一个进程。线程是进程的基本执行单位。一个进程中至少会有一条线程,当然也可能会有多条线程。比如你使用QQ音乐听歌,系统会创建一条线程去播放音乐。使用QQ音乐下载歌曲,系统会创建一条线程去下载歌曲。这两个操作是可以同时进行的,也就说一个进程中可以同时运行多条线程。

长沙火山 3062

ROCm rocr-libhsakmt分析系列9-3: queue的内核创建流程

KFD队列是用户空间与GPU通信的核心机制,通过多种队列类型(计算、DMA、调试等)实现命令流管理。核心数据结构包括描述队列属性的queue_properties、内核调度对象queue、进程级管理器process_queue_manager,以及跨进程设备的qcm_process_device等。这些结构通过ring buffer、doorbell机制和MQD硬件描述符协同工作,支持队列全生命周期管理、资源调度、异常处理和上下文保存/恢复功能。

图形/计算GPU的驱动与虚拟化技术分享园地 2122

iOS swift-GCD-队列组

情境:在异步中完成所有操作后再在主线程里完成其它操作 比如这个例子:先根据图片链接下载完所有的图片后(异步操作),再回到主线程刷新表格数据 实现这个情境的方式有很多,但是现在以GCD的队列组来实现 步骤: 1.创建一个组 2.将下载图片的操作加入到组中 3.下载所有图片后,将下载图片的操作从组中移除 4.在notify中执行主队列操作 注意:当组中没有其它操作后,系统会主动调用no

LinXunFeng的博客 1927

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

iOS 并发:NSOperation 与调度队列入门(1)

并发就是一柄值得你学习使用并熟练掌握的双刃剑。它能帮助你打造高效、迅捷、响应及时的应用。于此同时,一旦误用,也会毫不留情地毁掉应用。因此,在开始编写并发代码之前,好好想想你为什么需要并发,你需要哪个 API 来解决问题?在 iOS 开发中,可用的 API 有很多。在本教程中,我们将探讨最常用的两个 API——NSOperation 以及调度队列。

wangpeng198688的专栏 3923

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IOS学习之路八(GCD与多线程)

GCD,全称Grand Central Dispath,是苹果开发的一种支持并行操作的机制。它的主要部件是一个FIFO队列和一个线程池,前者用来添加任务,后者用来执行任务。      GCD中的FIFO队列称为dispatch queue,它可以保证先进来的任务先得到执行(但不保证一定先执行结束)。      通过与线程池的配合,dispatch queue分为下面两种:    

Lves Li的专栏 1771

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IOS开发之多线程基础(NSThiread、GCD、NSOperation、Runloop)

IOS中的进程和线程 通长来说一个app就是一个进程 ios开发中较少的运用进程间的通信(XPC),绝大多数使用线程。 在ios开发中,为了保证流畅性以及线程安全,所有与UI相关的操作都应该放在主线程,所以有时候主线程也叫UI线程。 影响UI体验,耗时时间较长的操作,尽量放到非主线程中。比如网络请求以及和本地的IO操作。 在IOS开发中有关于多线程的知识点主要包括:NSThread、GCD、NSOperation和Runloop NSThread NSthread就是一个线程,它的底层是对pthread的封

Super_CJL的博客 383

iOS GCD并发处理

GCD中有一个重要的概念,派发队列(dispatch queue)。派发队列是一个对象,它可以接受任务,并将任务以先到先执行的顺序来执行。派发队列可以是并发的或串行的。并发队列可以执行多任务,串行队列同一时间只能执行单一任务。 1、3中类型的派发队列 (1)串行队列,串行队列通常用于同步访问一个特定的资源,每次只能执行一个任务。使用函数dispatch_queue_create,可以黄建串行队列。 (2)并发队列,也称为全局派发队列,可以并发地执行一个或多个任务。当并发地执行多个任务时,必然涉及哪些任务先执

weixin_46642112的博客 509

iOS 多线程之GCD

级别: ★★☆☆☆ 标签:「iOS」「多线程」「GCD」 作者: dac_1033 审校: QiShare团队 一、GCD简介 Grand Central Dispatch(GCD)是由苹果开发的多线程调度框架,能够优化多线程应用程序的执行过程以支持多核处理器。GCD底层有线程池,线程池的概念在上一篇文章中有简单介绍,线程池是系统自动来维护,开发者只关注队列(Dispatch Queue)及任...

weixin_33912445的博客 154

iOS: GCD入门

);这里可以理解为: 把任务提交给queue, 然后当前线程不用等待这个任务执行完成, 继续向下执行.});这里的执行结果是132↓提交任务 2↓不等待↓任务 2↓等待 queue 调度↓执行});这里意思是: 把任务提交给 queue, 然后当前线程必须等待这个任务执行结束, 才能继续往下走.});1↓2↓3因为sync会等待。sync提交任务等待任务执行完成当前线程继续async提交任务不等待当前线程继续。

for_ever_love__的博客 584

iOS的GCD、NSThread、NSOperation、锁、Runloop的介绍和使用

GCD GCD (Grand Central Dispatch) GCD两个核心概念:任务和队列 任务 任务就是执行操作的意思,也就是block那段代码。执行操作有两种:同步执行和异步执行。 同步执行(sync):阻塞主线程并执行任务,不会开启新线程任务 异步执行(async):不会阻塞主线程,会开启新线程执行任务,在后台执行 队列 这里的队列就是任务队列,即用来存放任务的队列。队列是一种...

VictorZhang 1733

iOS-GCD 队列组的使用

// 1.队列组 dispatch_group_t group = dispatch_group_create(); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 2.下载图片1 __blo...

aquioy6868的博客 192

光速道路:iOS多线程之『GCD』详尽总结

Grand Central Dispatch(GCD)是苹果为iOS提供的一套强大的多线程编程接口,可以让我们以极高的效率处理并发任务。在编程的旅程中,GCD是我们的得力助手,它帮助我们有效地管理线程,使我们的应用运行得更加流畅。这是因为我们试图在主队列中同步执行一个任务,但主队列已经在执行一个任务(也就是我们的代码本身),因此我们的任务会被阻塞,导致死锁。:如果有一组相关的任务,我们可以使用调度组来管理它们,使我们的代码更加清晰。:主队列负责UI的更新,如果在主队列中执行耗时任务,会导致UI变得不流畅。

good7ob的博客 295

iOS 多线程 必谈之GCD

早期文章搬家, 原文链接 GCD (Grand Gentral Dispatch):存在于libdispatch 中,是一套基于C的API,函数功能灰常强大 一、dispatch queue 首先引入两个概念: 1.任务:执行的操作 2.队列:存放任务的 队列的类型: 1.并发队列 自己创建:dispatch_queue_create() 全局并发队列:dispatch_get_global_queue() // 创建并发队列 dispatch_queue_t queue1 =

jeversonjee's blog 446

iOS中GCD的魔力

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Heiti SC Light'} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Heiti SC Light'; min-height: 12.0px} span.s1 {font: 12.0px 'Hiragino Kaku Gothic ProN'} GCD(Grand Central Dispatch)是一个大的主题

Care iOS技术团队 1万+

ios项目中使用gcd的场景_iOS中超级超级详细介绍GCD

本文是来自@FlyOceanFish的投稿Grand Central Dispatch(GCD)是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级中实现。开发者只需要定义想执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务。由于线程管理是作为系统的一部分来实现的,因此可统一管理,也可执行任务,这样就比以前的线程更有效率。Dispat...

weixin_39977886的博客 284
上一篇: ios-UI高级 多线程的互斥解决
下一篇: ios-UI高级 GCD的相关设置
A_StayFoolish
博客等级 码龄10年 0粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值