为什么这段代码会导致崩溃?

 DispatchQueue.main.sync {
        // Operation To Perform
 }

为什么我们必须这样写:-
DispatchQueue.global().async(execute: {
    print("test")
    DispatchQueue.main.sync{
        print("main thread")
    }
})

当我们在CellForRowAt或任何其他方法中的线程中编写代码时,它将以同步或异步方式工作于主线程或全局线程?

最佳答案

ios - GCD主线程崩溃问题(需要解释)?-LMLPHP

根据Apple 的说法,尝试在主队列上同步执行工作项会导致死锁

因此,编写DispatchQueue.main.sync {}可能会导致死锁,因为由应用程序执行的所有UI操作都是在主队列上执行的,除非我们手动在后台队列上切换某些任务。这也回答了您关于在哪个线程上调用CellForRowAt 的问题。与UI操作或UIkit相关的所有方法都是从主线程调用的

同步执行任务意味着阻塞线程,直到任务未完成为止,在这种情况下,您试图阻塞系统/应用程序已经在其中执行某些任务并可能导致死锁的主线程。完全不建议阻塞主线程,这就是为什么我们需要异​​步切换到后台线程以便不阻塞主线程的原因。

要了解更多信息,您可以访问以下链接:
https://developer.apple.com/documentation/dispatch

10-07 18:56
查看更多