iOS子线程操作总结
子线程同步与异步:
dispatch_sync(),同步添加操作。他是等待添加进队列里面的操作完成之后再继续执行。
dispatch_queue_t concurrentQueue = dispatch_queue_create("my.concurrent.queue", DISPATCH_QUEUE_CONCURRENT);
NSLog(@"1");
dispatch_sync(concurrentQueue, ^(){
NSLog(@"2");
[NSThread sleepForTimeInterval:10];
NSLog(@"3");
});
NSLog(@"4");
输出 :
11:36:25.313 GCDSeTest[544:303] 1
11:36:25.313 GCDSeTest[544:303] 2
11:36:30.313 GCDSeTest[544:303] 3//模拟长时间操作
11:36:30.314 GCDSeTest[544:303] 4
dispatch_async ,异步添加进任务队列,它不会做任何等待
dispatch_queue_t concurrentQueue = dispatch_queue_create("my.concurrent.queue", DISPATCH_QUEUE_CONCURRENT);
NSLog(@"1");
dispatch_async(concurrentQueue, ^(){
NSLog(@"2");
[NSThread sleepForTimeInterval:5];
NSLog(@"3");
});
NSLog(@"4");
输出:
11:42:43.820 GCDSeTest[568:303] 1
11:42:43.820 GCDSeTest[568:303] 4
11:42:43.820 GCDSeTest[568:1003] 2
11:42:48.821 GCDSeTest[568:1003] 3//模拟长时间操作时间
子线程操作UI:
方法1:performSelectorOnMainThread
[self performSelectorOnMainThread:@selector(updateUI:) withObject:image waitUntilDone:NO];
方法2:dispatch_async(dispatch_get_main_queue(), ^{ ... })
- dispatch_async(dispatch_get_global_queue(0, 0), ^{
- // 处理耗时操作的代码块...
- //通知主线程刷新
- dispatch_async(dispatch_get_main_queue(), ^{
- //回调或者说是通知主线程刷新,
- });
- });
dispatch_async开启一个异步操作,第一个参数是指定一个gcd队列,第二个参数是分配一个处理事物的程序块到该队列。
dispatch_get_global_queue(0, 0),指用了全局队列。
一般来说系统本身会有3个队列。global_queue,current_queue,以及main_queue.
获取一个全局队列是接受两个参数,第一个是我分配的事物处理程序块队列优先级。分高低和默认,0为默认2为高,-2为低
- #define DISPATCH_QUEUE_PRIORITY_HIGH 2
- #define DISPATCH_QUEUE_PRIORITY_DEFAULT 0
- #define DISPATCH_QUEUE_PRIORITY_LOW (-2)
处理完事物后,需要将结果返回给或者是刷新UI主线程,同样,和上面一样,抓取主线程,程序块操作。
iOS子线程操作总结相关推荐
- Ios子线程渲染Opengl
1. 介绍 ios并没有像Android glsurfaceview或者Qt QOpenglWidget 那样完整Opengl渲染View封装,官方demo也是主线程创建的CADisplayLink提 ...
- [异步、tensorflow] - 子线程操作tensor,主线程处理tensor
参考 整体流程如下图 代码 import tensorflow as tf"""模拟: 子线程不停的取数据放入队列中, 主线程从队列中取数据执行包含: 作用域的命名.把程 ...
- 解决子线程操作UI的方法
转载于:https://www.cnblogs.com/ouyangping/p/7414289.html
- C#中子线程操作主线程中窗体上控件的方法
Demo this.listView1.Visible = true;this.listView1.BeginUpdate();this.listView1.EndUpdate(); //结束数据处理 ...
- DLL内线程同步主线程研究(子线程代码放到主线程执行)
DLL内线程同步主线程研究(子线程代码放到主线程执行) 我们在实际项目中经常会用到多线程编程,比如Socket编程等,在创建的线程内同步主线程一般使用Synchronize方法实现子线程操作放到主线程 ...
- 为什么子线程中不能直接更新UI
点击上方"dotNET全栈开发","设为星标" 加"星标★",每天11.50,好文必达 全文约4000字,预计阅读时间8分钟 当初有同事就碰 ...
- android 关于关于子线程更新UI的一些事
我们在看一些书或者博客时总是会看到一句话"android更新UI操作都是在Main主线程中,子线程中不能进行UI更新操作"那么,在子线程中真的不能进行UI的更新操作吗? //源码环 ...
- Android为什么不能在子线程更新UI
Android为什么不能在子线程更新UI Android为什么不能在子线程更新UI? 如果不做这个校验,是不是我也可以正常在子线程更新UI 但是google为什么要这样去设计呢 ViewRootImp ...
- 面试官问我:Andriod为什么不能在子线程更新UI?
记得看文章三部曲,点赞,评论,转发. 微信搜索[程序员小安]关注还在移动开发领域苟活的大龄程序员,"面试系列"文章将在公众号同步发布. 1.前言 看完<你为什么在现在的公司不 ...
最新文章
- mysql乐观锁总结和实践
- 中科大计算机专业跟浙江大学计算机专业相比,浙大计算机研究生近年录报比与中国科学技术大学的比较...
- 对HA的简单认识以及HA集群删除
- 42.虚拟内存如何设置:
- Ubuntu 11.10 Server下搭建Maven私服
- python 天气预报 mysql_Python+PyQt5+MySQL实现天气管理系统
- win10命令提示符怎么打开_Win10系统防火墙怎么打开?ARP防火墙启用步骤
- RiPro子主题V8.0 – V8.1,开心版
- Swagger中paramType
- Linux运维故障排查——SSH连接Fedora不成功的原因
- 增长量计算n+1原则_事业单位行测:巧解增长量计算公式
- 【Proteus】超声波测距
- 离散时间傅里叶变换(DTFT)
- duplicate from active dg 的 run 脚本 sfile 为完整配置可能导致的一些错误
- 处理安卓机不支持backdrop-filter毛玻璃效果样式
- 后缀是lnk是什么文件_ink是什么文件
- 手游直播到底难在哪里?
- 永远不要忘记_它永远不会忘记一张脸
- Assignment | 05-week3 -Part_2-Trigger Word Detection
- 虚拟机报错模块“Disk”启动失败。 未能启动虚拟机。
热门文章
- 计算机硬件与游戏发展史,电脑硬件的发展历程中 什么是电竞SSD?
- 测评结果_刚刚,2018全国文明城市测评结果重磅公布!你的家乡排第几?
- matlab相关的数字信号,数字信号处理及其MATLAB实现.ppt
- 和与余数的和同余理解_每日一题 | 第38期:数量关系之余数特性
- linux里打包和压缩文件,linux ---打包和压缩文件
- RocketMQ 消息丢失场景及解决办法
- 解决原子性问题?你首先需要的是宏观理解
- java poi设置单元格格式为数值,Apache POI 如何读取Excel中数值类型单元格所规定的保留小数位?...
- 散列表的设计与实现_python基础之字典与集合实现
- html src 图片不显示图片,css中不用src也让图片显示的方法是什么?