GCD(Grand Central Dispatch)是一个大的主题。它可以提高代码的执行效率与多核的利用率。是苹果的开源项目,如果你是一个追求软件效率的开发人员,这门技术你一定要有所研究。

今天要介绍的是如何从网上下载大量的文件, 方法有许多,传通的就是用多线程,面iOS中有很好用的Operator Queeu, 或者用传通的NStrhead, pthread. 今天我不介绍这些方法,而是得用GCD来完成这个下载任务。

今天这个demo, 展示面几个功能:

1. 预定义了大量的要下载的图片URL

2. 创建一个GCD queue并开始下载图片

3. 在动画出现消失的时候,同时显示图片

主要代码:

  1. @interface UIImageView (DispatchLoad)
  2. - (void) setImageFromUrl:(NSString*)urlString;
  3. - (void) setImageFromUrl:(NSString*)urlString
  4. completion:(void (^)(void))completion;
  5. @end
  1. #import "UIImageView+DispatchLoad.h"
  2. @implementation UIImageView (DispatchLoad)
  3. - (void) setImageFromUrl:(NSString*)urlString {
  4. [self setImageFromUrl:urlString completion:NULL];
  5. }
  6. - (void) setImageFromUrl:(NSString*)urlString
  7. completion:(void (^)(void))completion {
  8. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  9. NSLog(@"Starting: %@", urlString);
  10. UIImage *avatarImage = nil;
  11. NSURL *url = [NSURL URLWithString:urlString];
  12. NSData *responseData = [NSData dataWithContentsOfURL:url];
  13. avatarImage = [UIImage imageWithData:responseData];
  14. NSLog(@"Finishing: %@", urlString);
  15. if (avatarImage) {
  16. dispatch_async(dispatch_get_main_queue(), ^{
  17. self.image = avatarImage;
  18. });
  19. dispatch_async(dispatch_get_main_queue(), completion);
  20. }
  21. else {
  22. NSLog(@"-- impossible download: %@", urlString);
  23. }
  24. });
  25. }
  26. @end

这只是一个简单展示GCD异步操作的demo,它的用武之地远不止这点。记住,最重要的是使用它后,即使我们的工作线程在处理很繁重的任务,也能使我们的UI很平滑。

demo的源码可以在这儿下载。

转载于:https://www.cnblogs.com/pengyingh/articles/2356733.html

iOS中GCD的魔力相关推荐

  1. IOS中的多线程之GCD

    在ios中,使用多线程有三种方式,分别是:NSThread.NSOperation和NSOperationQueue.GCD,在本节,主要讲解一下CDD的使用. GCD(Grand Central D ...

  2. iOS中几种数据持久化方案总结

    概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) ...

  3. ios 中的小技巧 - 总有你想要的 一

    UITableView的Group样式下顶部空白处理 在viewWillAppear里面添加如下代码: //分组列表头部空白处理 CGRect frame = myTableView.tableHea ...

  4. iOS Swift GCD 开发教程

    本教程将带你详细了解 GCD 的概念和用法,通过文中的代码示例和附带的 Github 示例工程,可以进一步加深对这些概念的体会.附带的示例工程是一个完整可运行的 App 项目:DispatchQueu ...

  5. iOS中的多线程 NSOperation

    在ios中,使用多线程有三种方式,分别是:NSThread.NSOperation和NSOperationQueue.GCD,在本节,主要讲解一下NSOperation的使用. NSOperation ...

  6. iOS中的异步和多线程概况

    一.异步 (1)当一个异步过程调用发出后,调用者不能立刻得到结果.实际处理这个调用的部件在完成后,通过状态.通知和回调来通知调用者.比如iOS类库中的NSURLConnectioin中使用代理的方式就 ...

  7. iOS中的三大定时器

    iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD. NSTimer 方式1 // 创建定时器NSTimer *timer = [NSTi ...

  8. 浅谈iOS中关于app的优化

    目录 我要给出的建议将分为三个不同的等级: 入门级. 中级和进阶级: 入门级(这是些你一定会经常用在你app开发中的建议) 1. 用ARC管理内存 2. 在正确的地方使用reuseIdentifier ...

  9. iOS 多线程GCD

    为了了解.记忆更深刻,记录下,后面也会附上自己git 上demo,欢迎互相学习!! 一:什么是GCD GCD本身是苹果公司为多核的并行运算提出的解决方案.GCD在工作时会自动利用更多的处理器核心,以充 ...

最新文章

  1. 注意力机制原理及其模型发展和应用
  2. ABAP股票查看代码
  3. 在Linux操作系统下使用虚拟光驱的方法
  4. Hbase之protobuf的使用
  5. 平衡二叉树Python解法
  6. 机器人实现屠宰自动化
  7. python的zip()函数
  8. DuckChat聊天系统PHP,仿微信在线聊天源码 DuckChat聊天系统PHP
  9. oracle的redo与undio
  10. MFC字符串操作(三)MFC CString其他用法小结
  11. SQLAPI++ Library 4.2.1 VS2010破解版
  12. Office Ribbon 界面开发入门教程:QtitanRibbon详解
  13. FFMPEG:SPS和PPS
  14. 【浅谈递归(一)】递归的基本思想
  15. 【python教程】揭秘京东|淘宝秒杀抢购背后的黑幕,为什么你总抢不到商品?
  16. 富文本生成pdf-java
  17. [讨论]什么是网络安全?
  18. js 数组去重 的5种方法
  19. python:实现十进制转二进制算法(附完整源码)
  20. java护士排班 test 根据 1天24小时分成6班,一个护士一天上8个小时,一周上40小时,进行一周排班安排!拷贝,直接运行。

热门文章

  1. sonar:查询全部项目的bug和漏洞总数(只查询阻断/严重/主要级别)
  2. Luogu4451 [国家集训队]整数的lqp拆分
  3. a标签跳页传参,以及截取URL参数
  4. Enum类的非一般用法汇总(工作中遇到时持续更新)
  5. C# 获取电脑的网络连接状态
  6. ElasticSearch elasticsearch-servicewrapper 在linux上的安装部署全程记录
  7. Toon Shader
  8. 第 19 章 XML映射
  9. Java报异常时getMessage()方法返回null
  10. Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决