Swift 从异步闭包内部调用的函数也是异步的?
Swift Function called from inside Asynchronous closure also Asynchronous?
假设我有一个异步闭包,我调用了一个我在其中编写的函数。这个函数是异步执行还是在主队列执行?
AVCaptureStillImageOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: {(sampleBuffer, error) in
self.myFunctionToDoSomething()
})
我想知道如果我的函数需要很长时间才能执行,它会通过在主队列上执行来阻塞我的UI吗?
此外,我在哪里可以找到有关此函数或任何其他 IOS 函数的完成处理程序的信息?这是我查看的页面,但它没有告诉我处理程序是否异步以及它在哪个队列上。
"Asynchronous" 和 "executed on the main queue" 并不互斥。 myFunctionToDoSomething
声明将确定它是否是异步的,但无需执行任何特殊操作,它将在调用 captureStillImage...
的回调的任何队列上执行。您可以阅读文档以查看该队列是什么,但是如果您希望 myFunction
在特定队列上执行,您必须通过以下方式声明:
DispatchQueue.main.async {
self.myFunctionToDoSomething()
}
或者如果myFunction...
是异步的,或者会花很长时间执行:
DispatchQueue.global().async {
self.myFunctionToDoSomething()
}
假设我有一个异步闭包,我调用了一个我在其中编写的函数。这个函数是异步执行还是在主队列执行?
AVCaptureStillImageOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: {(sampleBuffer, error) in
self.myFunctionToDoSomething()
})
我想知道如果我的函数需要很长时间才能执行,它会通过在主队列上执行来阻塞我的UI吗?
此外,我在哪里可以找到有关此函数或任何其他 IOS 函数的完成处理程序的信息?这是我查看的页面,但它没有告诉我处理程序是否异步以及它在哪个队列上。
"Asynchronous" 和 "executed on the main queue" 并不互斥。 myFunctionToDoSomething
声明将确定它是否是异步的,但无需执行任何特殊操作,它将在调用 captureStillImage...
的回调的任何队列上执行。您可以阅读文档以查看该队列是什么,但是如果您希望 myFunction
在特定队列上执行,您必须通过以下方式声明:
DispatchQueue.main.async {
self.myFunctionToDoSomething()
}
或者如果myFunction...
是异步的,或者会花很长时间执行:
DispatchQueue.global().async {
self.myFunctionToDoSomething()
}