iOS中GCD的魔力
GCD(Grand Central Dispatch)是一个大的主题。它可以提高代码的执行效率与多核的利用率。是苹果的开源项目,如果你是一个追求软件效率的开发人员,这门技术你一定要有所研究。
今天要介绍的是如何从网上下载大量的文件, 方法有许多,传通的就是用多线程,面iOS中有很好用的Operator Queeu, 或者用传通的NStrhead, pthread. 今天我不介绍这些方法,而是得用GCD来完成这个下载任务。
今天这个demo, 展示面几个功能:
1. 预定义了大量的要下载的图片URL
2. 创建一个GCD queue并开始下载图片
3. 在动画出现消失的时候,同时显示图片
主要代码:
- @interface UIImageView (DispatchLoad)
- - (void) setImageFromUrl:(NSString*)urlString;
- - (void) setImageFromUrl:(NSString*)urlString
- completion:(void (^)(void))completion;
- @end
- #import "UIImageView+DispatchLoad.h"
- @implementation UIImageView (DispatchLoad)
- - (void) setImageFromUrl:(NSString*)urlString {
- [self setImageFromUrl:urlString completion:NULL];
- }
- - (void) setImageFromUrl:(NSString*)urlString
- completion:(void (^)(void))completion {
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
- NSLog(@"Starting: %@", urlString);
- UIImage *avatarImage = nil;
- NSURL *url = [NSURL URLWithString:urlString];
- NSData *responseData = [NSData dataWithContentsOfURL:url];
- avatarImage = [UIImage imageWithData:responseData];
- NSLog(@"Finishing: %@", urlString);
- if (avatarImage) {
- dispatch_async(dispatch_get_main_queue(), ^{
- self.image = avatarImage;
- });
- dispatch_async(dispatch_get_main_queue(), completion);
- }
- else {
- NSLog(@"-- impossible download: %@", urlString);
- }
- });
- }
- @end
这只是一个简单展示GCD异步操作的demo,它的用武之地远不止这点。记住,最重要的是使用它后,即使我们的工作线程在处理很繁重的任务,也能使我们的UI很平滑。
demo的源码可以在这儿下载。
转载于:https://www.cnblogs.com/pengyingh/articles/2356733.html
iOS中GCD的魔力相关推荐
- IOS中的多线程之GCD
在ios中,使用多线程有三种方式,分别是:NSThread.NSOperation和NSOperationQueue.GCD,在本节,主要讲解一下CDD的使用. GCD(Grand Central D ...
- iOS中几种数据持久化方案总结
概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) ...
- ios 中的小技巧 - 总有你想要的 一
UITableView的Group样式下顶部空白处理 在viewWillAppear里面添加如下代码: //分组列表头部空白处理 CGRect frame = myTableView.tableHea ...
- iOS Swift GCD 开发教程
本教程将带你详细了解 GCD 的概念和用法,通过文中的代码示例和附带的 Github 示例工程,可以进一步加深对这些概念的体会.附带的示例工程是一个完整可运行的 App 项目:DispatchQueu ...
- iOS中的多线程 NSOperation
在ios中,使用多线程有三种方式,分别是:NSThread.NSOperation和NSOperationQueue.GCD,在本节,主要讲解一下NSOperation的使用. NSOperation ...
- iOS中的异步和多线程概况
一.异步 (1)当一个异步过程调用发出后,调用者不能立刻得到结果.实际处理这个调用的部件在完成后,通过状态.通知和回调来通知调用者.比如iOS类库中的NSURLConnectioin中使用代理的方式就 ...
- iOS中的三大定时器
iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD. NSTimer 方式1 // 创建定时器NSTimer *timer = [NSTi ...
- 浅谈iOS中关于app的优化
目录 我要给出的建议将分为三个不同的等级: 入门级. 中级和进阶级: 入门级(这是些你一定会经常用在你app开发中的建议) 1. 用ARC管理内存 2. 在正确的地方使用reuseIdentifier ...
- iOS 多线程GCD
为了了解.记忆更深刻,记录下,后面也会附上自己git 上demo,欢迎互相学习!! 一:什么是GCD GCD本身是苹果公司为多核的并行运算提出的解决方案.GCD在工作时会自动利用更多的处理器核心,以充 ...
最新文章
- 注意力机制原理及其模型发展和应用
- ABAP股票查看代码
- 在Linux操作系统下使用虚拟光驱的方法
- Hbase之protobuf的使用
- 平衡二叉树Python解法
- 机器人实现屠宰自动化
- python的zip()函数
- DuckChat聊天系统PHP,仿微信在线聊天源码 DuckChat聊天系统PHP
- oracle的redo与undio
- MFC字符串操作(三)MFC CString其他用法小结
- SQLAPI++ Library 4.2.1 VS2010破解版
- Office Ribbon 界面开发入门教程:QtitanRibbon详解
- FFMPEG:SPS和PPS
- 【浅谈递归(一)】递归的基本思想
- 【python教程】揭秘京东|淘宝秒杀抢购背后的黑幕,为什么你总抢不到商品?
- 富文本生成pdf-java
- [讨论]什么是网络安全?
- js 数组去重 的5种方法
- python:实现十进制转二进制算法(附完整源码)
- java护士排班 test 根据 1天24小时分成6班,一个护士一天上8个小时,一周上40小时,进行一周排班安排!拷贝,直接运行。
热门文章
- sonar:查询全部项目的bug和漏洞总数(只查询阻断/严重/主要级别)
- Luogu4451 [国家集训队]整数的lqp拆分
- a标签跳页传参,以及截取URL参数
- Enum类的非一般用法汇总(工作中遇到时持续更新)
- C# 获取电脑的网络连接状态
- ElasticSearch elasticsearch-servicewrapper 在linux上的安装部署全程记录
- Toon Shader
- 第 19 章 XML映射
- Java报异常时getMessage()方法返回null
- Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决