7ba*_*all 5 nsthread grand-central-dispatch ios swift
我有一个这样的功能:
func foobar() {
let targetThread = Thread.current
DispatchQueue.main.async {
UIView.animate(withDuration: 0.5, animations: {
// Code I need to run on the main thread
}, completion: {
// Code I want to run on targetThread -- HOW?
}
}
}
Run Code Online (Sandbox Code Playgroud)
我如何从 执行代码targetThread?谢谢。
DispatchQueues 不是线程。您会注意到无法像DispatchQueue获取当前线程那样获取当前线程。如果你只想在不是主线程的地方运行代码,你可以使用:
DispatchQueue.global().async { ... }
如果您真的想针对您的特定线程,您有两种选择。
第一个是您可以使用NSObject's perform(_:on:with:waitUntilDone:)(或相关方法之一)并传递NSThread您获得的 。您的问题中没有足够的上下文来说明这是否适合您或举个例子,但您可以搜索。
第二个是重新编写开始所有这些的代码以使用NSOperationQueue,因此foobar()将在 的操作中运行NSOperationQueue,然后在完成动画时,您将安排另一个NSOperation在同一操作队列上运行。您也可以直接使用调度队列来做到这一点:即创建您自己的调度队列,调度 foobar,然后在动画完成时从 main 调度回您的队列。
| 归档时间: |
|
| 查看次数: |
2747 次 |
| 最近记录: |