请原谅我的初学者问题。我关注了一个教程,它有以下代码段。
我不明白dispatch_async
的要点,如果你通过调用self.webView...
在the main queue on the main thread执行阻止dispatch_get_main_queue()
,为什么还要把它放在dispatch_async
内}?
感谢
let url = NSURL(string: "http://www.stackoverflow.com")
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {
(data, response, error) in
if error == nil {
var urlContent = NSString(data: data, encoding: NSUTF8StringEncoding)
println(urlContent)
dispatch_async(dispatch_get_main_queue()) {
self.webView.loadHTMLString(urlContent!, baseURL: nil)
}
}
}
task.resume()
答案 0 :(得分:1)
dispatch_async
用于在另一个队列上执行块。它需要2个参数,第一个是它应该执行的队列,第二个是代码块。
NSURLSession.sharedSession().dataTaskWithURL(url!){...}
他们在您的代码中使用dispatch_async的原因是...
代码块将在其他队列中执行(而不是在主队列中)。
因此,如果您想在主队列中执行self.webView.loadHTMLString(urlContent!, baseURL: nil)
,则必须使用dispatch_async(dispatch_get_main_queue()){...}
。