假设我有一个异步闭包,我调用了一个我在其中编写的函数。这个函数是异步的还是在主队列上执行?
AVCaptureStillImageOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: {(sampleBuffer, error) in
self.myFunctionToDoSomething()
})
我想知道如果我的函数需要很长时间才能执行,它会不会因为在主队列上执行而阻塞我的 UI?
此外,我在哪里可以找到有关此函数或任何其他 IOS 函数的完成处理程序的信息?这是我查看的页面,但它没有告诉我处理程序是否异步以及它在哪个队列上。
最佳答案
“异步”和“在主队列上执行”并不互斥。 myFunctionToDoSomething
声明将确定它是否是异步的,但无需执行任何特殊操作,它将在调用 captureStillImage...
的回调的任何队列上执行。您可以阅读文档以查看该队列是什么,但是如果您希望 myFunction
在特定队列上执行,您必须通过以下方式声明:
DispatchQueue.main.async {
self.myFunctionToDoSomething()
}
或者如果 myFunction...
是异步的,或者需要很长时间才能执行:
DispatchQueue.global().async {
self.myFunctionToDoSomething()
}
关于从异步闭包内部调用的 Swift 函数也是异步的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42705560/