Search code examples
iosobjective-cgrand-central-dispatchnsurlsession

Does NSURLSession Take place in a separate thread?


I was designing an app that uses NSURLSession and thinking about putting it in a different thread with Grand Central Dispatch, but if NSURLSession automatically does that in the background, I wouldn't have to use GCD then, correct?

So in other words, does NSURLSession automatically use Grand Central Dispatch in the background, so we don't have to worry about it?


Solution

  • Yes,

    NSURLSession (URLSession in Swift) does its work in a background thread. The download ALWAYS takes place asynchronously on a background thread.


    EDIT:

    There is no reason to wrap your code that invokes NSURLSession (or URLSession in Swift 3 or later) in a GCD call.


    You can control whether its completion methods are executed on a background thread or not by the queue you pass in in the delegateQueue parameter to the init method. If you pass in nil, it creates a (background thread) serial operation queue where your completion methods are called. If you pass in NSOperationQueue.mainQueue() (OperationQueue.mainQueue() in recent versions of Swift) then your completion delegate methods/closures will be invoked on the main thread and you won't have to wrap UI calls in dispatch_async() calls to the main thread.