ใน Swift 4.2 และ Xcode 10.1
เรามีคิวสามประเภท:
1. คิวหลัก:
คิวหลักคือคิวอนุกรมที่สร้างขึ้นโดยระบบและเชื่อมโยงกับเธรดหลักของแอปพลิเคชัน
2. Global Queue:
Global คิวเป็นคิวที่เกิดขึ้นพร้อมกันซึ่งเราสามารถร้องขอตามลำดับความสำคัญของงาน
3. คิวที่กำหนดเอง: ผู้ใช้สามารถสร้างได้ คิวที่เกิดขึ้นพร้อมกันที่กำหนดเองจะถูกแมปเข้ากับหนึ่งในคิวทั่วโลกโดยการระบุคุณสมบัติคุณภาพการบริการ (QoS)
DispatchQueue.main//Main thread
DispatchQueue.global(qos: .userInitiated)// High Priority
DispatchQueue.global(qos: .userInteractive)//High Priority (Little Higher than userInitiated)
DispatchQueue.global(qos: .background)//Lowest Priority
DispatchQueue.global(qos: .default)//Normal Priority (after High but before Low)
DispatchQueue.global(qos: .utility)//Low Priority
DispatchQueue.global(qos: .unspecified)//Absence of Quality
คิวทั้งหมดเหล่านี้สามารถดำเนินการได้สองวิธี
1. การดำเนินการแบบซิงโครนัส
2. การดำเนินการแบบอะซิงโครนัส
DispatchQueue.global(qos: .background).async {
// do your job here
DispatchQueue.main.async {
// update ui here
}
}
//Perform some task and update UI immediately.
DispatchQueue.global(qos: .userInitiated).async {
// Perform task
DispatchQueue.main.async {
// Update UI
self.tableView.reloadData()
}
}
//To call or execute function after some time
DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
//Here call your function
}
//If you want to do changes in UI use this
DispatchQueue.main.async(execute: {
//Update UI
self.tableView.reloadData()
})
จาก AppCoda: https://www.appcoda.com/grand-central-dispatch/
//This will print synchronously means, it will print 1-9 & 100-109
func simpleQueues() {
let queue = DispatchQueue(label: "com.appcoda.myqueue")
queue.sync {
for i in 0..<10 {
print("🔴", i)
}
}
for i in 100..<110 {
print("Ⓜ️", i)
}
}
//This will print asynchronously
func simpleQueues() {
let queue = DispatchQueue(label: "com.appcoda.myqueue")
queue.async {
for i in 0..<10 {
print("🔴", i)
}
}
for i in 100..<110 {
print("Ⓜ️", i)
}
}