这篇文章主要介绍“如何使用swift中的GCD”,在日常操作中,相信很多人在如何使用swift中的GCD问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用swift中的GCD”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
GCD是采用任务+队列的方式,有易用、效率高、性能好的特点
//concurrent 并行
let queue = DispatchQueue(
label: "myQueue",
qos: DispatchQoS.default,
attributes: DispatchQueue.Attributes.concurrent,
autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency.inherit,
target: nil)
//sync
queue.sync {
sleep(1)
print("in queue sync")
}
//async
queue.async {
sleep(1)
print("in queue async")
}
//asyncAfter
queue.asyncAfter(deadline: .now() + 1) {
print("in queue asyncAfter")
}
print("after invoke queue method")
/*
in queue sync
after invoke queue method
in queue async
in queue asyncAfter
*/
//DispatchGroup-wait
let workingGroup = DispatchGroup()
let workingQueue = DispatchQueue(label: "request_queue")
workingGroup.enter()
workingQueue.async {
sleep(1)
print("A done")
workingGroup.leave()
}
workingGroup.enter()
workingQueue.async {
print("B done")
workingGroup.leave()
}
print("first")
//workingGroup.wait()
//print("last")
/*
first
A done
B done
last
*/
//DispatchGroup-notify
workingGroup.notify(queue: workingQueue) {
print("A and B done")
}
print("other")
/*
first
other
A done
B done
A and B done
*/
//DispatchSource-Timer
var seconds = 10
let timer: DispatchSourceTimer = DispatchSource.makeTimerSource(flags: [], queue: DispatchQueue.global())
timer.schedule(deadline: .now(), repeating: 1.0)
timer.setEventHandler {
seconds -= 1
if seconds < 0 {
timer.cancel()
} else {
print(seconds)
}
}
timer.resume()
/*
9
8
7
6
5
4
3
2
1
0
*/
//实现一个线程安全的Array的读和写
var array = Array(0...1000)
let lock = NSLock()
func getLastItem() -> Int? {
lock.lock()
var temp: Int? = nil
if array.count > 0 {
temp = array[array.count - 1]
}
lock.unlock()
return temp
}
func removeLastItem() {
lock.lock()
array.removeLast()
lock.unlock()
}
queue.async {
for _ in 0..<1000{
removeLastItem()
}
}
queue.async {
for _ in 0..<1000 {
if let item = getLastItem() {
print(item)
}
}
}
到此,关于“如何使用swift中的GCD”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/artwl/blog/5023698