从内部调用Swift函数异步闭包也是异步?

时间:2017-03-09 21:16:24

标签: swift asynchronous grand-central-dispatch

假设我有一个异步闭包,我调用了一个我在其中编写的函数。这个函数是异步还是在主队列上执行?

AVCaptureStillImageOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: {(sampleBuffer, error) in

      self.myFunctionToDoSomething()          
})

我想知道我的函数是否需要很长时间才能执行,是否会通过在主队列上执行来阻止我的UI?

另外,我在哪里可以找到有关此功能或任何其他IOS功能的完成处理程序的信息?这是我查看的页面,但它没有告诉我处理程序是否是异步的,以及它所在的队列。

https://developer.apple.com/reference/avfoundation/avcapturestillimageoutput/1387374-capturestillimageasynchronously

1 个答案:

答案 0 :(得分:3)

"异步"和#34;在主队列上执行"不是相互排斥的。 myFunctionToDoSomething声明将确定它是否是异步的,但没有做任何特殊的事情,它将在任何队列captureStillImage...的回调被调用时执行。您可以阅读文档以查看该队列是什么,但是如果您希望在特定队列上执行myFunction,则必须通过说:

来声明该队列。
DispatchQueue.main.async {
    self.myFunctionToDoSomething()
}

或者如果myFunction...是异步的,或者需要很长时间才能执行:

DispatchQueue.global().async {
    self.myFunctionToDoSomething()
}