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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:iOS GCD常见名词及解释
下一篇:Swift 视图控制器之间的反向传值

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2023年11月07日 15时04分12秒