只想澄清一下在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)
此外,在后续视图控制器上发出额外的网络请求时,我应该使用我在这里使用的相同队列,还是应该创建一个新队列?
答案 0 :(得分:0)
默认情况下NSURLSession
API是高度异步的。来自Apple docs的有用信息。
没有明显的问题表明用GCD
包装你的代码块,并且还在后台线程上运行完成块,因此正确使用GCD
来更新UITableview