iOS 多线程之GCD的简单使用

本文通过实例讲解了GCD(Grand Central Dispatch)在iOS开发中的使用方法,特别是如何利用GCD进行图片的异步加载并在主线程中更新UI,避免了阻塞用户体验。

最近在开发中发现好多地方代码用到了dispatch_get_global_queue,dispatch_get_main_queue,这些其实就是GCD的使用,在学习GCD时根据这篇文章来学习了http://blog.youkuaiyun.com/totogo2010/article/details/8016129 。

对于里面的代码 我重新做了一些测试来验证GCD的作用。

主要代码:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        NSURL * url = [NSURL URLWithString:@"http://avatar.youkuaiyun.com/2/C/D/1_totogo2010.jpg"];

        NSData * data = [[NSData alloc]initWithContentsOfURL:url];

        UIImage *image = [[UIImage alloc]initWithData:data];

        if (data != nil) {

            //图片下载完成后 回到主线程 显示图片

            dispatch_async(dispatch_get_main_queue(), ^{

                self.imageView.image = image;

             });

        }

    });

运行结果:


这段代码 主要的功能是从url文件中加载一张图片,等图片加载完了以后就跳到主线程。可能有些还不够明白,下面是我的理解,dispatch_get_global_queue 的意思得到全局的队列,

NSData * data = [[NSData alloc]initWithContentsOfURL:url]; 

UIImage *image = [[UIImage alloc]initWithData:data];

这两句代码 在另外一个线程中处理这些操作,等操作完了就会回到主线程来。

下面如果不加这个dispatch_async(dispatch_get_main_queue()的话

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        NSURL * url = [NSURL URLWithString:@"http://avatar.youkuaiyun.com/2/C/D/1_totogo2010.jpg"];

        NSData * data = [[NSData alloc]initWithContentsOfURL:url];

        UIImage *image = [[UIImage alloc]initWithData:data];

        if (data != nil)

        {

            //图片下载完成后 回到主线程 显示图片

            //dispatch_async(dispatch_get_main_queue(), ^{

                self.imageView.image = image;

          //  });

        }

    });

运行结果是这样的:


从这个现象可以看出 当我们的图片在另外一个线程加载时,图片视图并没有等待加载完了再去显示还是直接显示,当时的图片还没有数据,所有只显示成这样。 所以 dispatch_async(dispatch_get_main_queue() 判断加载完没让程序回到主线程显示很重要。 知道这个以后看到这样的代码就不会有疑问了。


欢迎使用“可调增益放大器 Multisim”设计资源包!本资源专为电子爱好者、学生以及工程师设计,旨在展示如何在著名的电路仿真软件Multisim环境下,实现一个具有创新性的数字控制增益放大器项目。 项目概述 在这个项目中,我们通过巧妙结合模拟电路与数字逻辑,设计出一款独特且实用的放大器。该放大器的特点在于其增益可以被精确调控,并非固定不变。用户可以通过控制键,轻松地改变放大器的增益状态,使其在1到8倍之间平滑切换。每一步增益的变化都直观地通过LED数码管显示出来,为观察和调试提供了极大的便利。 技术特点 数字控制: 使用数字输入来调整模拟放大器的增益,展示了数字信号对模拟电路控制的应用。 动态增益调整: 放大器支持8级增益调节(1x至8x),满足不同应用场景的需求。 可视化的增益指示: 利用LED数码管实时显示当前的放大倍数,增强项目的交互性和实用性。 Multisim仿真环境: 所有设计均在Multisim中完成,确保了设计的仿真准确性和学习的便捷性。 使用指南 软件准备: 确保您的计算机上已安装最新版本的Multisim软件。 打开项目: 导入提供的Multisim项目文件,开始查看或修改设计。 仿真体验: 在仿真模式下测试放大器的功能,观察增益变化及LED显示是否符合预期。 实验与调整: 根据需要调整电路参数以优化性能。 实物搭建 (选做): 参考设计图,在真实硬件上复现实验。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值