Swift3 GCD的基本用法(二) - 队列的循环挂起恢复、其他常用方法

Swift3 GCD的基本用法(二) - 队列的循环挂起恢复、其他常用方法,第1张

概述接上一篇:Swift3 GCD的基本用法(一) - 任务和队列、服务优先级、信号量 本文代码:https://github.com/NinoWang/MultithreadingDemo/tree/master 队列的循环、挂起、恢复 // 循环 func dispatchApply() { DispatchQueue.global().async {

接上一篇:Swift3 GCD的基本用法(一) - 任务和队列、服务优先级、信号量

本文代码:https://github.com/NinoWang/MultithreadingDemo/tree/master

队列的循环、挂起、恢复

// 循环    func dispatchApply() {        dispatchQueue.global().async {            dispatchQueue.concurrentPerform(iterations: 10,execute: { (index) in                print("this is NO.\(index),thread=\(Thread.current)")            })                        dispatchQueue.main.async {                print("Done")            }        }    }        // 挂起和恢复    func suspendAndResume() {        // 先挂起显示结果的任务 图片下载完成后恢复        print("开始任务")        let globalQueue = dispatchQueue(label: "ShowResult")        globalQueue.suspend()        globalQueue.async {            print("图片下载完成")        }                let concurrentQueue = dispatchQueue(label: "Concurrent",attributes: .concurrent)        concurrentQueue.async {            if let url = URL.init(string: "https://placebeard.it/800/800") {                do {                    print("正在下载,请稍后...")                    _ = try Data(contentsOf: url)                                        dispatchQueue.main.async {                        globalQueue.resume()                    }                } catch {                    print(error)                }            }        }    }

GCD的其他方法

final class Singleton: NSObject {    static let shared = Singleton()    private overrIDe init() {}        func func1() {        print("单例中的 function")    }}

注:final关键字的作用是这个类或方法不希望被继承和重写

// 只执行一次    func runOnce() {        Singleton.shared.func1()    }        // asyncAfter dispatchTime 延时执行    func delaydispatchTime() {        print("开始执行\(NSDate())")        // asyncAfter 并不是在指定时间后执行任务处理,而是在指定时间后把任务追加到queue里面。因此会有少许延迟。注意,我们不能(直接)取消我们已经提交到 asyncAfter 里的代码。        // dispatch_time用于计算相对时间,当设备睡眠时,dispatch_time也就跟着睡眠了,let time: dispatchTimeInterval = .seconds(3)        dispatchQueue.global().asyncAfter(deadline: dispatchTime.Now() + time,execute: {            print("相对延时3秒后执行\(NSDate())")        })    }        // asyncAfter dispatchWallTime 延时执行    func deplydispatchWallTime() {        print("开始执行\(NSDate())")                let walltime = dispatchWallTime.Now() + 3.0                //wallDeadline需要一个dispatchWallTime类型。创建dispatchWallTime类型,需要timespec的结构体。        dispatchQueue.global().asyncAfter(wallDeadline: walltime) {            print("绝对延时3秒后执行\(NSDate())")        }    }        // 任务组    func queueGroup() {        let globalQueue = dispatchQueue.global()        let group = dispatchGroup()                globalQueue.async(group: group,execute: {            print("执行任务1")        })                globalQueue.async(group: group,execute: {            print("执行任务2")        })                globalQueue.async(group: group,execute: {            print("执行任务3")        })                globalQueue.async(group: group,execute: {            print("执行任务4")        })                group.notify(queue: globalQueue) {            print("任务全部完成")        }    }

Swift3 GCD的基本用法(一) - 任务和队列、服务优先级、信号量 总结

以上是内存溢出为你收集整理的Swift3 GCD的基本用法(二) - 队列的循环/挂起/恢复、其他常用方法全部内容,希望文章能够帮你解决Swift3 GCD的基本用法(二) - 队列的循环/挂起/恢复、其他常用方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1055353.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存