为什么这段代码会导致崩溃?
DispatchQueue.main.sync {
// Operation To Perform
}
为什么我们必须这样写:-
DispatchQueue.global().async(execute: {
print("test")
DispatchQueue.main.sync{
print("main thread")
}
})
当我们在CellForRowAt或任何其他方法中的线程中编写代码时,它将以同步或异步方式工作于主线程或全局线程?
最佳答案
根据Apple 的说法,尝试在主队列上同步执行工作项会导致死锁。
因此,编写DispatchQueue.main.sync {}
可能会导致死锁,因为由应用程序执行的所有UI操作都是在主队列上执行的,除非我们手动在后台队列上切换某些任务。这也回答了您关于在哪个线程上调用CellForRowAt 的问题。与UI操作或UIkit相关的所有方法都是从主线程调用的
同步执行任务意味着阻塞线程,直到任务未完成为止,在这种情况下,您试图阻塞系统/应用程序已经在其中执行某些任务并可能导致死锁的主线程。完全不建议阻塞主线程,这就是为什么我们需要异步切换到后台线程以便不阻塞主线程的原因。
要了解更多信息,您可以访问以下链接:
https://developer.apple.com/documentation/dispatch