如何从 Swift 中的主线程中关闭

Posted

技术标签:

【中文标题】如何从 Swift 中的主线程中关闭【英文标题】:How do I switch off from the main thread in Swift 【发布时间】:2020-10-09 23:13:03 【问题描述】:

在 Swift 中,如果使用以下命令向主线程分派一个工作块:

DispatchQueue.main.async 
   // work
   // myCallback()

在 myCallback 中放置 print(Thread.current) 表示它在主线程上运行。此时如何脱离主线程?或者,如果我看错了,我怎么知道我发送到主线程的某些工作何时完成?

【问题讨论】:

【参考方案1】:

如果你想手动在后台线程上运行一些东西,你可以先获取具有指定服务质量类的全局系统队列,然后调用它的async code 方法来调度一个块执行:

例子:

print(Thread.current)

DispatchQueue.global(qos: .background).async 
    print(Thread.current)

日志:

<NSThread: 0x600003b60bc0>number = 1, name = main
<NSThread: 0x600003bcf340>number = 14, name = (null)

Dispatch Queue 的文档;

global(qos:) 的文档。

【讨论】:

【参考方案2】:

如果要使用另一个线程,您可以使用以下。

let queue = DispatchQueue(label: "onde queue")

print(Thread.current)

queue.async 
    print(Thread.current)
    DispatchQueue.main.async 
        print(Thread.current)
    

您必须创建一个队列来更改线程,但是当您在另一个线程上并且想要返回主线程时,您将使用 DispatchQueue.main.async

【讨论】:

以上是关于如何从 Swift 中的主线程中关闭的主要内容,如果未能解决你的问题,请参考以下文章

引用 C# 中的主线程

Swift”线程 1:PresentViewController 中的信号 SIGABRT

如何在线程中关闭 QWebSocket?

如何从 ViewModel 命令生成的线程中关闭窗口? [复制]

Android中关于Handler Looper理解

Java中的主线程与UI线程