iOS开发--线程通信
介绍下面几种通信方式
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开发--线程通信相关推荐
- iOS开发 - 线程与进程的认识与理解
进程: 进程是指在系统中正在运行的一个应用程序,比如同时打开微信和Xcode,系统会分别启动2个进程; 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内; 线程: 一个进程要想执行任务 ...
- iOS 开发线程 gcd
基础知识: 下午9:09 一.基础概念 1.什么是GCD 全称是Grand Central Dispath 纯C语言编写,提供非常多且强大的函数,是目前推荐的多线程开发方法,NSOperation便是 ...
- iOS开发线程同步技术-锁
概览 1,什么是锁(临界区)? 2,常用的锁有哪些? 3,相关链接 什么是锁(临界区) 临界区:指的是一块对公共资源进行访问的代码,并非一种机制或是算法. 常用的锁有哪些? 互斥锁:是一种用于多线程编 ...
- iOS开发之线程间的MachPort通信与子线程中的Notification转发
如题,今天的博客我们就来记录一下iOS开发中使用MachPort来实现线程间的通信,然后使用该知识点来转发子线程中所发出的Notification.简单的说,MachPort的工作方式其实是将NSMa ...
- android 线程信号量,iOS开发 多线程的高级应用-信号量semaphore
在iOS开发的道路上,多线程的重要性不言而喻. 大部分我们都停留在基础的使用上面.缺乏高级应用. 缺乏提升,是因为我们面对他太少,复杂的事情重复做,复杂的事务基础化. 差距就是这样拉开了 言归正传: ...
- iOS开发里的线程安全机制
[编者按]本文为再读苹果<Threading Programming Guide>笔记第四篇,主要分享了线程安全机制以及设计时所需要注意的事项.从最初的"什么是线程"到 ...
- iOS开发 - 在实战中挖掘之线程间的通信方式
技术这行怎么变的高大上呢?那一定是抛出一个个的专有名词,很多时候,我们在谈论技术的时候,往往忘记了技术本身的作用是什么?我不能说这有多不好,但多少还是会有失偏颇. 今天我们要说的内容是线程间通信,说得 ...
- iOS开发多线程篇—线程安全
一.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数 ...
- iOS开发之使用XMPPFramework实现即时通信(二)
上篇的博客iOS开发之使用XMPPFramework实现即时通信(一)只是本篇的引子,本篇博客就给之前的微信加上即时通讯的功能,主要是对XMPPFramework的使用.本篇博客中用到了Spark做测 ...
最新文章
- UVA 1376	 Animal Run 最短路
- linux用终端上传文件和文件家到远程的服务器
- 实现程序间的数据传递
- python 迭代详解_详解python中的迭代
- Myeclipes连接Mysql数据库配置
- 【网站】Kiwi浏览器中文网
- 3D游戏建模到底需要学习哪些美术基础?新手学习3D建模?
- 借力信息化工具,助跑精细化管理
- 使用决策树分类算法判断一下你的Python水平
- Apache与Tomcat的区别
- 从孙子算经到中国剩余定理
- 计算机组成原理输入实验报告,计算机组成原理实验 实验报告.doc
- iphone 3G 刷机到3.12
- CCNA考试题库中英文翻译版及答案6
- 新员工入职表_医院新员工入职培训怎么做?
- Fatal signal 11 (SIGSEGV) at 0x00000014 (code=1), thread 29925 (cloud.diversion)
- php按一列拆分excel表格,excel表格要根据某一列数据拆分-excel怎么按照某一列拆分表格...
- python函数中变量LEGB原则
- 75 [backtrader期货策略]十大经典策略-分时均线交叉策略
- android 文字转语音(中文) TextSpeech
热门文章
- php 字段验证类库,PHP验证类库常用数据安全验证
- 【SSL】java keytool工具操作java带的(JKS)证书库
- android 摄像头参数,获取Android设备上的详细的摄像头信息
- java框架ssm整合_SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
- python3 安装pyinstaller_python3.7 打包(.exe)神器——pyinstaller 安装及用法
- 字符串匹配rk算法c语言,字符串匹配问题(BFRK算法)
- linux 查看磁盘分区,文件系统,使用情况的命令和相关工具介绍,Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍df...
- 加工中心局部坐标系g52设定_CNC加工中心程序代码大全,数控加工必备!
- pythonre正则表达式1012pythonre正则表达式_python re模块 正则表达式
- ubuntu导入python的包_在ubuntu环境下怎么利用python将数据批量导入数据hbase