文档章节

第01天多线程网络:(16):GCD实现线程间通信

宇鸿165
 宇鸿165
发布于 2017/04/17 10:12
字数 471
阅读 5
收藏 0

#####一、 线程通信示例

 线程通信示例
 - 从 子线程 回到 主线程
 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//         dispatch_async(dispatch_get_main_queue(), ^{ // 异步回到主线程
         dispatch_sync(dispatch_get_main_queue(), ^{ // 同步 是在主线程执行的
        });
 });

#####二、 GCD实现线程间通信1.先创建一个子线程,2.在子线程里面回归到主线程刷新UI(异步、同步)

    // 1.创建子线程 下载图片
    // dispatch_get_global_queue 获取程序并发队列 0是默认优先级别
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        
        
        // 下载图片
        
        // 1.确定URL
        NSURL *url = [NSURL URLWithString:@"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1492682244149&di=8cb0d91ab86d2454e4750091128e02ab&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fforum%2Fw%253D580%2Fsign%3D7f0d397fabec8a13141a57e8c7029157%2F551a8794a4c27d1efa3a265419d5ad6eddc43822.jpg"];
        
        // 2.将URL转成data
        NSData *imageData = [NSData dataWithContentsOfURL:url];
        
        // 3.将data 转成 image
        UIImage *image = [UIImage imageWithData:imageData];
        
        NSLog(@"download -- %@",[NSThread currentThread]);
        
        // 更新主线程 (回到主线程)
#pragma 1.GCD是可以嵌套的
#pragma 2.dispatch_get_main_queue() 主队列的任务都在主线程执行
//        dispatch_async(dispatch_get_main_queue(), ^{ // 异步
        dispatch_sync(dispatch_get_main_queue(), ^{ // 同步 是在主线程执行的
            self.imageView.image = image;
            NSLog(@"download -- %@",[NSThread currentThread]);
        });
        
        
    });

code

/**
 线程通信示例
 
 - 从 子线程 回到 主线程
  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//         dispatch_async(dispatch_get_main_queue(), ^{ // 异步回到主线程
         dispatch_sync(dispatch_get_main_queue(), ^{ // 同步 是在主线程执行的
        });
 });
 */

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    // 1.创建子线程 下载图片
    // dispatch_get_global_queue 获取程序并发队列 0是默认优先级别
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        
        
        // 下载图片
        
        // 1.确定URL
        NSURL *url = [NSURL URLWithString:@"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1492682244149&di=8cb0d91ab86d2454e4750091128e02ab&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fforum%2Fw%253D580%2Fsign%3D7f0d397fabec8a13141a57e8c7029157%2F551a8794a4c27d1efa3a265419d5ad6eddc43822.jpg"];
        
        // 2.将URL转成data
        NSData *imageData = [NSData dataWithContentsOfURL:url];
        
        // 3.将data 转成 image
        UIImage *image = [UIImage imageWithData:imageData];
        
        NSLog(@"download -- %@",[NSThread currentThread]);
        
        // 更新主线程 (回到主线程)
#pragma 1.GCD是可以嵌套的
#pragma 2.dispatch_get_main_queue() 主队列的任务都在主线程执行
//        dispatch_async(dispatch_get_main_queue(), ^{ // 异步
        dispatch_sync(dispatch_get_main_queue(), ^{ // 同步 是在主线程执行的
            self.imageView.image = image;
            NSLog(@"download -- %@",[NSThread currentThread]);
        });
        
        
    });
    
}


@end

© 著作权归作者所有

宇鸿165
粉丝 1
博文 919
码字总数 368963
作品 0
广州
私信 提问
多线程的底层实现机制

1.多线程的底层实现 (1)首先回答什么是线程 1个进程要想执行任务,必须得有线程.线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 (2)什么是多线程 1个进程中可以开...

万能的匹诺曹
2016/06/22
43
0
iOS多线程 Swift4 GCD深入解析

iOS多线程深入解析 必要的概念 进程/线程 进程:进程指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。 线程:线程是进...

一蓑烟羽
2017/11/07
0
0
GCD ios多线程 runloop

一.线程概述 二.创建线程 1.使用NSThread 2.使用NSObject 3.POSIX Thread 三.多线程进阶 1.NSOperation & NSOperationQueue 2.GCD 四.进程间通信 1.和主线程的通信 2.任意线程间的通信 五.Ru...

孙启超
2013/03/25
3.2K
0
IOS--GCD多线程分析

GCD Grand Central Dispatch 来实现多线程的一种方式 ! 1: 使用异步函数执行主队列中的任务 dispatchasync(dispatchgetmainqueue(), ^{.....});的作用是将代码块中的工作转回到主线程。 主队...

Mark_Jiang
2016/01/27
44
0
iOS 多线程GCD的简单使用

①什么是线程?什么是进程? 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行...

JoshSone
2016/11/13
50
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
4
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部