GCD的基础

 #pragma mark - 使用GCD 创建一个 串行 队列
// 第一种:系统提供的创建串行队列的方法
// 在真正的开发中如果需要创建串行队列,比较习惯用这种
// dispatch_queue_t queue = dispatch_get_main_queue(); #pragma mark - 使用GCD去创建 并行 队列
// 第一种:系统的
// 参数1:表示优先级(有四个,没有明显区别)
// 参数2:系统保留字
// dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); #pragma mark - 使用GCD并行队列 创建子线程
// 参数1:队列名
// 参数2:block// dispatch_async(queue, ^{
// NSLog(@"main1 = %@", [NSThread mainThread]);
// NSLog(@"current1 = %@", [NSThread currentThread]);
// });
// dispatch_async(queue, ^{
// NSLog(@"main2 = %@", [NSThread mainThread]);
// NSLog(@"current2 = %@", [NSThread currentThread]);
// });
// dispatch_async(queue, ^{
// NSLog(@"main3 = %@", [NSThread mainThread]);
// NSLog(@"current3 = %@", [NSThread currentThread]);
// });
// 。。。。创建N个 #pragma mark - 几秒之后去做每一件事
// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// NSLog(@"3.0秒的时候");
// }); #pragma mark - 重复像一个队列中添加多个任务
// dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);
// 第一个参数:添加的数量
// 第二个参数:队列
// 第三个参数:block
// dispatch_apply(100, queue, ^(size_t index) {
// NSLog(@"%ld", index);
// }); #pragma mark - 分组
// // 创建一个分组
// dispatch_group_t group = dispatch_group_create();
// // 创建一个队列
// dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);
// // 创建任务1:
// dispatch_group_async(group, queue, ^{
// NSLog(@"i am 1");
// });
// // 创建任务2:
// dispatch_group_async(group, queue, ^{
// NSLog(@"i am 2");
// });
// 。。。。创建N个 // // 用于监听素有的任务执行的情况的 {所以此功能代码必须放在所有任务之后}
// dispatch_group_notify(group, queue, ^{
// NSLog(@"i am notify");
// }); #pragma mark - 并发中的串行 (披着羊皮的狼)
// // 创建的队列串行
// // DISPATCH_QUEUE_SERIAL 顺序执行
// // DISPATCH_QUEUE_CONCURRENT 无序执行
// dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);
// dispatch_async(queue, ^{
// NSLog(@"test 1");
// });
// dispatch_async(queue, ^{
// NSLog(@"test 2");
// });
// 。。。。创建N个

代码展示:

 #import "ViewController.h"

 @interface ViewController ()
/// 创建一个imageView
@property (nonatomic,strong) UIImageView *imgView;
/// 创建一个data用于接收数据
@property (nonatomic,strong) NSData *imageData; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 把imageView添加到视图上
self.imgView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.imgView.backgroundColor = [UIColor cyanColor];
[self.view addSubview:self.imgView]; [self dataHandle];
}
#pragma mark - 解析数据
- (void)dataHandle {
__weak typeof(self) weakSelf = self;
// 创建子线程 在子线程中请求数据
dispatch_async(dispatch_queue_create(, DISPATCH_QUEUE_CONCURRENT), ^{
NSURL *url = [NSURL URLWithString:@"http://pic.58pic.com/58pic/13/11/15/83b58PICXf4_1024.jpg"];
// 接收数据
weakSelf.imageData = [NSData dataWithContentsOfURL:url];
// 返回主线程 刷新UI
dispatch_async(dispatch_get_main_queue(), ^{
// 传值
weakSelf.imgView.image = [UIImage imageWithData:self.imageData];
});
}); } @end

复习知识点:GCD多线程的更多相关文章

  1. Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍

    1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过s ...

  2. iOS开发——GCD多线程详解

    GCD多线程详解 1. 什么是GCD Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,简单来说,GCD就是iOS一套解决多线程的机制,使用GCD能够最大限度简化多线程 ...

  3. GCD多线程的一个全面的题目

    GCD多线程的一个全面的题目  

  4. [Xcode 实际操作]八、网络与多线程-(22)使用GCD多线程技术异步下载图片

    目录:[Swift]Xcode实际操作 本文将演示如何使用使用GCD多线程技术异步下载图片. Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法 ...

  5. JavaEE期末复习知识点总结

    JavaEE期末复习知识点总结 Java企业应用开发环境 Maven的基础概念 Maven是一个项目管理工具,可以对 Java 项目进行构建.依赖管理 Maven仓库 Maven 仓库是项目中依赖的第 ...

  6. Object-C关于GCD多线程的使用

    ```objc1 使用Crearte函数创建的并发队列和全局并发队列的主要区别: 1)全局并发队列在整个应用程序中本身是默认存在的并且对应有高优先级.默认优先级.低优先级和后台优先级一共四个并发队列, ...

  7. iOS开发——多线程篇——NSOperation(基于GCD多线程编程),下载图片并合成新图片

    一.NSOperation的基本概念1.简介NSOperation的作用配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperatio ...

  8. GCD 多线程 初探

    GCD编程的核心就是dispatch队列,dispatch block的执行最终都会放进某个队列中去进行,它类似NSOperationQueue但更复杂也更强大,并且可以嵌套使用.所以说,结合bloc ...

  9. ios 使用GCD 多线程 教程

    什么是GCD Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法.该方法在Mac OS X 10.6雪豹中首次推出,并随后被引入到了iOS4.0中.GCD ...

随机推荐

  1. python学习(序章)

    好久没写过笔记了,最近听说写博客笔记能使知识记忆更深刻,于是就开始写写,不为推广,只为增加记忆.好了,开始python的学习: 学习一门语言的快慢,与人无关,主要是与学习的目的有关,python语言目 ...

  2. Jquery $.extend的重载方法详述

    1 $.extend(result,item1,item2,item3,........)  -这个重载方法主要是用来合并,将所有的参数都合并到result中,并返回result,但是这样会破坏res ...

  3. sql update 触发器 可获得被update的行的信息

    类型:转载   sql update 触发器 可获得被update的行的信息,需要的朋友可以参考下. 复制代码 代码如下: create trigger TgName on tb for update ...

  4. HDU OJ 5441 Travel 2015online E

    题目:click here 题意: 有个很暴躁的人,想坐车旅行n个城市.连接城市共有m条路(双向).他坐在车上很不爽,每次最多忍耐x分钟.但是每站下车他又可以休息(重新计时).总共有q次询问.问途中有 ...

  5. dubbo架构演变之路

    背景 (#) 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时, ...

  6. MySqlQueryList

    //辅助查询列表,或实例 public class MySqlQueryList { #region List<T> ToList<T>(string sql, params ...

  7. winform代码:关联窗体数据更新,删除dataGridview中选中的一行或多行

    一.关联窗体数据更新 关联窗体数据修改时,如果一个为总体数据显示窗体A,另一个为详细修改窗体B,从A进入B,在B中对数据进行修改,然后返回A,这时A窗体的数据需要更新. 我采用最简单的方法,首先保证每 ...

  8. access数据库 top语句失效解决方法

    使用查询语句  select   top 1  *  from  News  order  by  [PublicTime] desc   就不一定管用了,如果News表里面的PublicTime字段 ...

  9. Protel 99SE铺铜问题总结

    一.PCB电路板放置铺铜有什么作用? 散热: 屏蔽 抗干扰 pcb板子带有寄生电容: 提高板子强度: 美观: 增加被抄板的难度,尤其是覆铜+黑油.   二.PROTEL不规则铺铜的方法: 1.先要知道 ...

  10. spring学习总结(mybatis,事务,测试JUnit4,日志log4j&slf4j,定时任务quartz&spring-task,jetty,Restful-jersey等)

    在实战中学习,模仿博客园的部分功能.包括用户的注册,登陆:发表新随笔,阅读随笔:发表评论,以及定时任务等.Entity层设计3张表,分别为user表(用户),essay表(随笔)以及comment表( ...