使用new Combine framework时,可以指定从发布服务器接收元素的计划程序.
在这种情况下,将发布者分配给UI元素时,RunLoop.main
和DispatchQueue.main
之间有很大的区别吗?第一个返回主线程的运行循环,第二个返回与主线程关联的队列.
使用new Combine framework时,可以指定从发布服务器接收元素的计划程序.
在这种情况下,将发布者分配给UI元素时,RunLoop.main
和DispatchQueue.main
之间有很大的区别吗?第一个返回主线程的运行循环,第二个返回与主线程关联的队列.
我在Swift论坛上发布了类似的问题.我鼓励大家看https://forums.swift.org/t/runloop-main-or-dispatchqueue-main-when-using-combine-scheduler/26635页的讨论.
我只是复制并粘贴Philippe_Hausler的答案
RunLoop.作为调度程序的main最终调用RunLoop.主要的执行DispatchQueue.主呼叫调度队列.梅因.异步工作,出于实际目的,它们几乎是同构的.唯一的区别是,RunLoop调用最终在RunLoop调用中的不同位置执行,而如果libdispatch中的优化开始,DispatchQueue变量可能会立即执行.实际上,你永远不应该真正看到两者之间的区别.
RunLoop应该是当您有一个运行RunLoop的专用线程时,DispatchQueue可以是任何队列场景(请注意,请避免在DispatchQueues中运行RunLoop,它会导致一些非常严重的资源使用…).此外,值得注意的是,用作调度器的DispatchQueue必须始终是串行的,以遵守联合收割机操作员的合同.