
iOS GCD简单使用
发布日期:2021-05-27 02:41:54
浏览次数:4
分类:技术文章
本文共 1719 字,大约阅读时间需要 5 分钟。
一:从异步线程切换主线程
//Async to append block.DispatchQueue.global(qos: .default).async { // Deal with time-consuming tasks here. var para_3: Int = 0; para_3 = para_3 + 1; NSLog("Executed OK. And Parametermn is :\(para_3)"); // When time-consuming tasks finished, process this task in the main thread. DispatchQueue.main.async { var para_3: Int = 0; para_3 = para_3 + 1; NSLog("Executed OK. And Parametermn is :\(para_3)"); } }
说明:global
下面紧跟着的就是耗时操作,例如网络请求,大量复杂的运算等;main
内则回到了主线程,这里可以更新UI。GCD提供的这种方式非常类似于 Android里面的匿名类然后调用runOnUiThread()
的写法。
二:延时线程
// Create a delay task. let delayTask = DispatchWorkItem { var para_3: Int = 0; para_3 = para_3 + 1; NSLog("Executed OK. And Parametermn is :\(para_3) Last."); } DispatchQueue.main.asyncAfter(deadline: DispatchTime .now() + 5.0, execute: delayTask); delayTask.cancel();
说明:这里Swift不如Java那样拥有一个Timer那么方便,但也能正常使用。这里先创建一个延时任务,然后放到主线程里面执行。执行的参数第一个为要延迟触发的时间,第二个为要执行的任务。每个延迟任务都有一个cancel()
方法供与取消。
三:创建串行与并行队列
// Create a serial queue. let mySerial = DispatchQueue(label: "SerialOne"); mySerial.async { var para_1: Int = 0; para_1 = para_1 + 1; NSLog("Executed OK. And Parametermn is :\(para_1)"); } // Create a concurrent queue. let myConcurrent = DispatchQueue(label: "ConcurrentOne", attributes: .concurrent); myConcurrent.async { var para_2: Int = 0; para_2 = para_2 + 1; NSLog("Executed OK. And Parametermn is :\(para_2)"); }
说明:使用DispatchQueue
不加以说明默认就是串行队列;使用attributes
的.concurrent
属性就是并行队列。
转载地址:https://blog.csdn.net/kicinio/article/details/109896352 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2023年11月07日 15时04分12秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
python3 if else 嵌套
2019-03-25
python列表
2019-03-25
python可迭代对象
2019-03-25
Laravel架构之Service Container
2019-03-25
Laravel架构之Service Providers
2019-03-25
Laravel架构之Facades(外部静态接口)
2019-03-25
Laravel架构之Contracts
2019-03-25
Laravel基础之路由
2019-03-25
Laravel基础之中间件
2019-03-25
记一个Laravel项目https下访问,资源路径是http问题
2019-03-25
记一个scripty库在windows环境下无法运行问题
2019-03-25
docker之使用redis官方镜像
2019-03-25
php集成square功能(使用square/connect)
2019-03-25
记一个https下Laravel分页url为http问题
2019-03-25
原子颗粒特效动画库particles.js的使用
2019-03-25
vscode使用MinGW/GCC
2019-03-25
gcc/g++ -print-***选项打印编译器信息
2019-03-25
c++标准库实战之通用工具Pair
2019-03-25
c++标准库的宏__cplusplus
2019-03-25
cloudinary迁移以及前端上传
2019-03-25