JK140
JK140

Reputation: 785

Swift - Network Requests and Background Queue

just wanted some clarification on the best practices to make network api calls in Swift 2.

Here is how my typical network requests looks like to download JSON data:

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()

My question is: should I wrap all of this code block into a background queue? Should I do as follows:

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

Or should I use one of the given high priority queues such as:

dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)

Also, when making additional network requests on subsequent view controllers, should I use the same queue I use here or should I create a new one?

Upvotes: 1

Views: 1905

Answers (1)

Oleg Gordiichuk
Oleg Gordiichuk

Reputation: 15512

By default NSURLSession API is highly asynchronous. Usefull information from the Apple docs.

There is no visible issues that indicate to wrap you're code block with GCD and also completion block runs on background thread so there is right usage of the GCD to update UITableview

Upvotes: 1

Related Questions