示例A: - 這會導致應用程序崩潰。main.async vs main.sync()vs global()。Swift3中的異步GCD
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做的事意味着 在後臺線程中執行。
- 全局意味着執行一些併發隊列,即並行 任務。
Quest1: - 那麼爲什麼我的應用程序崩潰時,我在後臺線程執行任務,即main.async和比調用主線程來更新用戶界面。
任務2: - main.async & global()。async是否有區別。
你似乎有你的術語混淆,主=主線程,全局=後臺線程,同步意味着執行串行任務(在該隊列,例如主/全球) ,異步是併發的(再次在單個隊列上的併發任務),我有一個很好的頁面解釋這在stackoverflow文檔,但他們已經關閉它現在下來:( – Fonix
「x.sync意味着做主線程/ UI線程和x.async意味着在後臺線程中做的事情」 - 我不認爲這是真的,你不應該想到隊列爲線程(他們不一樣)。調用'async'意味着它不會阻塞,但是你在'DispatchQueue.main'上調用它,這是一個保證在主線程上運行的隊列。 – Ssswift
我從[鏈接]中瞭解到「x.sync表示在主線程/ UI線程中執行的操作」... https://stackoverflow.com/questions/42772907/what-does-main-sync-in- global-async-mean –