简单来说,我得出的结论是-
-有3种类型的队列,即1个主队列,4个全局队列和任意数量的自定义队列。 -系统提供给我们的是主线程和其他后台线程。-这意味着使用后台线程(不阻止UI)在主队列中执行任务,并且在任务完成时自动将其更新为UI,因为它已经在主队列中。
这意味着使用后台线程在Global Queue中执行任务,并且当任务完成时,而不是 使用将工作从 ,然后更新到UI。
我试图使用(main.sync)将完成的任务带到MainQueue,但是它已经在MainQueue上,因为我没有切换队列,并且此 (MainQueue等待自身)导致我的应用程序崩溃
解决方法示例A:-这会导致应用崩溃。
DispatchQueue.main.async { let url = URL(string: imageUrl)do { let data = try Data(contentsOf: url!)DispatchQueue.main.sync { self.imageIcon.image = UIImage(data: data)} }
范例B:-但事实并非如此
DispatchQueue.global().async { let url = URL(string: imageUrl)do { let data = try Data(contentsOf: url!)DispatchQueue.main.sync { self.imageIcon.image = UIImage(data: data)} }
据我所知
x.sync表示在主线程/ UI线程中执行操作,x.async表示在后台线程中执行操作。全局意味着用并发队列执行某些任务,即并行任务。任务1:-为什么在后台线程(即main.async)中执行任务时,我的应用程序崩溃了,而不是调用主线程来更新UI。
任务2:-main.async和global()。async是否有任何区别。