iOS: dispatch_async (dispatch_get_main_queue())

#swift2

#swift2

Вопрос:

Простите меня за вопрос новичка. Я следую руководству, в нем есть следующий фрагмент. Я не понимаю смысла dispatch_async , если вы все равно выполняете блок self.webView... в основной очереди в основном потоке, вызывая 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:

dispatch_async используется для выполнения блока в другой очереди. Для этого требуется 2 параметра: первый — очередь, в которой он должен выполняться, второй — блок кода.

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

Причина, по которой они используют dispatch_async в вашем коде, заключается в том, что блок ... кода будет выполняться в другой очереди (не в основной очереди).

Итак, если вы хотите выполнить self.webView.loadHTMLString(urlContent!, baseURL: nil) в основной очереди, тогда вам нужно использовать dispatch_async(dispatch_get_main_queue()){...} .