假设我有一个异步闭包,我调用了一个我在其中编写的函数。这个函数是异步还是在主队列上执行?
AVCaptureStillImageOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: {(sampleBuffer, error) in
self.myFunctionToDoSomething()
})
我想知道我的函数是否需要很长时间才能执行,是否会通过在主队列上执行来阻止我的UI?
另外,我在哪里可以找到有关此功能或任何其他IOS功能的完成处理程序的信息?这是我查看的页面,但它没有告诉我处理程序是否是异步的,以及它所在的队列。
答案 0 :(得分:3)
"异步"和#34;在主队列上执行"不是相互排斥的。 myFunctionToDoSomething
声明将确定它是否是异步的,但没有做任何特殊的事情,它将在任何队列captureStillImage...
的回调被调用时执行。您可以阅读文档以查看该队列是什么,但是如果您希望在特定队列上执行myFunction
,则必须通过说:
DispatchQueue.main.async {
self.myFunctionToDoSomething()
}
或者如果myFunction...
是异步的,或者需要很长时间才能执行:
DispatchQueue.global().async {
self.myFunctionToDoSomething()
}