线程间的通信主要用于主线程与子线程的,也有用于子线程与子线程的

介绍下面几种通信方式

1.利用GCD方式(推荐)

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {//开一个子线程dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{//下载图片NSURL *url = [NSURL URLWithString:@"http://e.hiphotos.baidu.com/image/pic/item/14ce36d3d539b600be63e95eed50352ac75cb7ae.jpg"];NSData *data = [NSData dataWithContentsOfURL:url];UIImage *img = [UIImage imageWithData:data];dispatch_async(dispatch_get_main_queue(), ^{//回到主线程self.imgVIew.image = img;});//在这里使用同步还是异步,区别是前者是按顺序依次执行,后者是先执行到最后再回到主线程NSLog(@"________");});
}

利用这种方式可以轻松地控制线程间的跳转通信

2.利用系统方法

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {//创建子线程[self performSelectorInBackground:@selector(downLoad) withObject:nil];
}//在子线程中下载图片
- (void)downLoad {NSURL *url = [NSURL URLWithString:@"http://e.hiphotos.baidu.com/image/pic/item/e7cd7b899e510fb34395d1c3de33c895d0430cd1.jpg"];NSData *data = [NSData dataWithContentsOfURL:url];UIImage *img = [UIImage imageWithData:data];//下载完毕,返回给主线程图片    [self.imgVIew performSelector:@selector(setImage:) onThread:[NSThread mainThread] withObject:img waitUntilDone:YES];}

补充:也可以使用

[self performSelectorOnMainThread:@selector(setImg:) withObject:img waitUntilDone:YES];这个方法返回主线程图片

@selector(这里面其实就是主线程中image属性的set方法)

3.使用NSOperation方式

与GCD类似

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {[[[NSOperationQueue alloc] init] addOperationWithBlock:^{//下载图片NSURL *url = [NSURL URLWithString:@"http://e.hiphotos.baidu.com/image/pic/item/e7cd7b899e510fb34395d1c3de33c895d0430cd1.jpg"];NSData *data = [NSData dataWithContentsOfURL:url];UIImage *img = [UIImage imageWithData:data];//回到主线程[[NSOperationQueue mainQueue] addOperationWithBlock:^{self.imgView.image = img;}];}];}

转载于:https://www.cnblogs.com/wanghuaijun/p/5326137.html

iOS开发--线程通信相关推荐

  1. iOS开发 - 线程与进程的认识与理解

    进程: 进程是指在系统中正在运行的一个应用程序,比如同时打开微信和Xcode,系统会分别启动2个进程; 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内; 线程: 一个进程要想执行任务 ...

  2. iOS 开发线程 gcd

    基础知识: 下午9:09 一.基础概念 1.什么是GCD 全称是Grand Central Dispath 纯C语言编写,提供非常多且强大的函数,是目前推荐的多线程开发方法,NSOperation便是 ...

  3. iOS开发线程同步技术-锁

    概览 1,什么是锁(临界区)? 2,常用的锁有哪些? 3,相关链接 什么是锁(临界区) 临界区:指的是一块对公共资源进行访问的代码,并非一种机制或是算法. 常用的锁有哪些? 互斥锁:是一种用于多线程编 ...

  4. iOS开发之线程间的MachPort通信与子线程中的Notification转发

    如题,今天的博客我们就来记录一下iOS开发中使用MachPort来实现线程间的通信,然后使用该知识点来转发子线程中所发出的Notification.简单的说,MachPort的工作方式其实是将NSMa ...

  5. android 线程信号量,iOS开发 多线程的高级应用-信号量semaphore

    在iOS开发的道路上,多线程的重要性不言而喻. 大部分我们都停留在基础的使用上面.缺乏高级应用. 缺乏提升,是因为我们面对他太少,复杂的事情重复做,复杂的事务基础化. 差距就是这样拉开了 言归正传: ...

  6. iOS开发里的线程安全机制

    [编者按]本文为再读苹果<Threading Programming Guide>笔记第四篇,主要分享了线程安全机制以及设计时所需要注意的事项.从最初的"什么是线程"到 ...

  7. iOS开发 - 在实战中挖掘之线程间的通信方式

    技术这行怎么变的高大上呢?那一定是抛出一个个的专有名词,很多时候,我们在谈论技术的时候,往往忘记了技术本身的作用是什么?我不能说这有多不好,但多少还是会有失偏颇. 今天我们要说的内容是线程间通信,说得 ...

  8. iOS开发多线程篇—线程安全

    一.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数 ...

  9. iOS开发之使用XMPPFramework实现即时通信(二)

    上篇的博客iOS开发之使用XMPPFramework实现即时通信(一)只是本篇的引子,本篇博客就给之前的微信加上即时通讯的功能,主要是对XMPPFramework的使用.本篇博客中用到了Spark做测 ...

最新文章

  1. UVA 1376 Animal Run 最短路
  2. linux用终端上传文件和文件家到远程的服务器
  3. 实现程序间的数据传递
  4. python 迭代详解_详解python中的迭代
  5. Myeclipes连接Mysql数据库配置
  6. 【网站】Kiwi浏览器中文网
  7. 3D游戏建模到底需要学习哪些美术基础?新手学习3D建模?
  8. 借力信息化工具,助跑精细化管理
  9. 使用决策树分类算法判断一下你的Python水平
  10. Apache与Tomcat的区别
  11. 从孙子算经到中国剩余定理
  12. 计算机组成原理输入实验报告,计算机组成原理实验 实验报告.doc
  13. iphone 3G 刷机到3.12
  14. CCNA考试题库中英文翻译版及答案6
  15. 新员工入职表_医院新员工入职培训怎么做?
  16. Fatal signal 11 (SIGSEGV) at 0x00000014 (code=1), thread 29925 (cloud.diversion)
  17. php按一列拆分excel表格,excel表格要根据某一列数据拆分-excel怎么按照某一列拆分表格...
  18. python函数中变量LEGB原则
  19. 75 [backtrader期货策略]十大经典策略-分时均线交叉策略
  20. android 文字转语音(中文) TextSpeech

热门文章

  1. php 字段验证类库,PHP验证类库常用数据安全验证
  2. 【SSL】java keytool工具操作java带的(JKS)证书库
  3. android 摄像头参数,获取Android设备上的详细的摄像头信息
  4. java框架ssm整合_SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
  5. python3 安装pyinstaller_python3.7 打包(.exe)神器——pyinstaller 安装及用法
  6. 字符串匹配rk算法c语言,字符串匹配问题(BFRK算法)
  7. linux 查看磁盘分区,文件系统,使用情况的命令和相关工具介绍,Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍df...
  8. 加工中心局部坐标系g52设定_CNC加工中心程序代码大全,数控加工必备!
  9. pythonre正则表达式1012pythonre正则表达式_python re模块 正则表达式
  10. ubuntu导入python的包_在ubuntu环境下怎么利用python将数据批量导入数据hbase