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. std::map中函数用法集合

    1 STL的map表里有一个erase方法用来从一个map中删除掉指令的节点  2 eg:  3 map<string,string> mapTest;  4 typedef map< ...

  2. zoj 1409 Communication System

    /*如果要一个物体的多种属性,最好用结构体,不要用二维数组或者多维数组.用多维数组进行关键字排序很不稳定 */ /*给每个设备的所有价格排序,每个设备选取恰好比已知带宽大的价格(这个时候的比例最大) ...

  3. Hibernate中,left join、inner join以及left join fetch区别(转)

    标签: hibernate hql inner join left right 杂谈 分类: SQL 原文地址:http://m33707.iteye.com/blog/829725 Select F ...

  4. HDU2005-第几天

    描述: 给定一个日期,输出这个日期是该年的第几天. 代码: #include<stdio.h> #include<string.h> #include<iostream& ...

  5. Centos rpm缺少依赖无法安装mysql5.5

    rpm -ivh mysql-5.5.22-2.1.i386.rpm --nodeps --force 缺少依赖导致rpm -ivh mysql-5.5.22-2.1.i386.rpm命令无法安装!

  6. PHP的环境搭建

    下载开发环境 wampserver 下载sublime text 2 sublime使用技巧 1:安装漂亮的编程字体http://pan.baidu.com/s/1xMex9 下载"程序编写 ...

  7. Linux C网络编程学习笔记

    Linux C网络编程总结报告 一.Linux C 网络编程知识介绍: 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端:(client) 在网络程序中, ...

  8. 电脑cmos是什么?和bois的区别?

    很多人都分不清电脑cmos和bois区别,有人一会儿说什么bois设置,有人一会儿说cmos设置.而看起来这两个又似乎差不多,本文将用最简单的白话文告诉各位,什么是cmos,以及cmos和bois的的 ...

  9. 从51跳新唐cortex学习3——细说新唐两种定时器

    的定时器我们已经是相当熟悉啦.但是,对于第一次接触新唐,第一次接触cortex的定时器一样,都是加1计数,但是功能和容量变大了),包括4个32位定时器(里面放24位的数据),还有分频功能.TMER0到 ...

  10. android 大小写转换

    private void toUpperCase(byte[] data, int start, int len) { int end = start + len; int dist = 'A' - ...