iOS:dispatch_async(dispatch_get_main_queue())

时间:2016-10-06 11:12:53

标签: swift2

请原谅我的初学者问题。我关注了一个教程,它有以下代码段。 我不明白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()

1 个答案:

答案 0 :(得分:1)

dispatch_async用于在另一个队列上执行块。它需要2个参数,第一个是它应该执行的队列,第二个是代码块。

NSURLSession.sharedSession().dataTaskWithURL(url!){...}

他们在您的代码中使用dispatch_async的原因是...代码块将在其他队列中执行(而不是在主队列中)。

因此,如果您想在主队列中执行self.webView.loadHTMLString(urlContent!, baseURL: nil),则必须使用dispatch_async(dispatch_get_main_queue()){...}