RunLoop.main กับ DispatchQueue.main ต่างกันยังไง

Chawatvish
Mar 4, 2021

มีเพื่อน ๆ คนไหนกำลังทำโปรเจคที่ใช้ Combine อยู่ละก็ คงมีคำถามคาใจ แต่ขี้เกียจหาคำตอบ มาอ่านอันนี้เพราะผมมีคำถามคาใจเหมือนกัน

หลังจากที่ได้ learning and doing เจ้า swift ui ร่วมกับ combine แบบ 2 way data binding ผมก็ได้เห็นอะไรสะดุดใจตรงที่ method receive(on:options:) พอย้อนกลับไปหาใน document ของ apple ก็ยิ่งสงสัยมากขึ้นว่า ทำไมเค้าถึงเลือกใช้
RunLoop.main ต่างจาก DispatchQueue.main จนไปพบว่า

ทั้ง 2 ทำ method นี้เป็น scheduler เหมือนกันแต่ต่างกันตรงที่การทำงานจะคนละสถานการณ์กัน กล่าวคือ ตัว RunLoop.main จะเป็น default mode ของ loop จะมีไว้เพื่อ update ตัว UI และจะไม่มีการรับ signal ใดๆจาก user interactive นั้นเอง โดยการเรียกของเจ้าตัวนี้จะไปเรียก RunLoop.main.preform เพื่อใช้งาน

ส่วนของ DispatchQueue.main มีไว้เพื่อให้เราทำ code block ใดๆ โดยการไปเรียก DispatchQueue.main.async เราสามารถใส่ code block ต่างๆที่เราต้องการลงไปได้

--

--