Swift - 网络请求和后台队列

Swift - Network Requests and Background Queue

只是想澄清一下在 Swift 2 中进行网络 api 调用的最佳做法。

这是我下载 JSON 数据的典型网络请求:

let session = NSURLSession(configuration: .defaultSessionConfiguration())
let url = NSURL(string: my_url_string)
let request = NSURLRequest(URL: url)

let dataTask = session.dataTaskWithRequest(request) { data, response, error in
   do {
       self.tableData = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! [NSDictionary]
       dispatch_async(dispatch_get_main_queue(), { () -> Void in
          self.tableView.reloadData()
       })
   } catch let error {
        print(error)
   }
}
dataTask.resume()

我的问题是:我应该将所有这个代码块包装到后台队列中吗?我应该这样做吗:

let download_queue = dispatch_queue_create("download", nil)
dispatch_async(download_queue) { () -> Void in
     previous code here
}

或者我应该使用给定的高优先级队列之一,例如:

dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)

此外,当在后续视图控制器上发出额外的网络请求时,我应该使用我在这里使用的相同队列还是应该创建一个新队列?

默认情况下 NSURLSession API 是高度异步的。来自 Apple docs.

的有用信息

没有明显的问题表明要用 GCD 包装您的代码块,并且完成块也在后台线程上运行,因此可以正确使用 GCD 来更新 UITableview