我一直在用DispatchQueue.main.async
长时间执行UI相关操作。
Swift 同时提供 DispatchQueue.main.async
和 DispatchQueue.main.sync
,并且都在主队列上执行。
谁能告诉我它们之间的区别?我应该什么时候使用?
DispatchQueue.main.async {
self.imageView.image = imageView
self.lbltitle.text = ""
}
DispatchQueue.main.sync {
self.imageView.image = imageView
self.lbltitle.text = ""
}
最佳答案
当您使用 async
它让调用队列继续前进,而无需等到分派(dispatch)的块被执行。相反sync
将使调用队列停止并等待您在块中分派(dispatch)的工作完成。因此 sync
容易导致死锁。尝试运行 DispatchQueue.main.sync
来自主队列,应用程序将卡住,因为调用队列将等待调度块结束,但它甚至无法启动(因为队列已停止并等待)
何时使用 sync
?当您需要等待在 DIFFERENT 队列上完成某事,然后才继续处理当前队列时
使用同步的示例:
在串行队列上,您可以使用 sync
作为互斥锁,以确保只有一个线程能够同时执行 protected 代码段。
关于ios - DispatchQueue.main.async 和 DispatchQueue.main.sync 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44324595/