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
只是想澄清一下在 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