使用new Combine framework时,可以指定从发布服务器接收元素的计划程序.

在这种情况下,将发布者分配给UI元素时,RunLoop.mainDispatchQueue.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必须始终是串行的,以遵守联合收割机操作员的合同.

Swift相关问答推荐

在Swift中initt()完成后运行一个函数

在解码字符串时需要帮助.

依赖于@Environment的init@StateObject

字典下标或运算符,如果密钥不存在,则添加指定的默认&值是SWIFT?

避免 `(())` 显式指定 Void 类型的枚举关联值

无法使用 RealityKit 播放 USDZ 动画

一组可散列的自定义元素插入相等的元素

快速更改tableView中的数据

如果 Swift 无法分配内存会怎样?

关联满足约束时的快速协议方法

您可以在运行时访问 Picker 元素并更改它们的 colored颜色 吗

如何获得不同的插入和移除过渡动画?

无法分配给属性:absoluteString是一个只能获取的属性

如何在 RxSwift 中获取 controlEvent 类型?

如何在 SwiftUI 中通过按钮点击一次为一个更改设置动画?

如何在界面生成器中创建 UILayoutGuide?

无法推断泛型参数的参数

如何判断 firebase 数据库值是否存在?

滑动侧边栏菜单 IOS 8 Swift

对分段控制的快速处理动作