NSURLSession是在一个单独的线程中发生的吗?

pwo*_*sdh 9 objective-c grand-central-dispatch ios nsurlsession

我正在设计一个使用NSURLSession的应用程序,并考虑将它放在与Grand Central Dispatch不同的线程中,但如果NSURLSession在后台自动执行此操作,那么我不必使用GCD,对吗?

换句话说,NSURLSession会在后台自动使用Grand Central Dispatch,所以我们不必担心吗?

Dun*_*n C 16

是,

NSURLSession在后台线程中完成它的工作.下载总是在后台线程上进行.


编辑:

没有理由在GCD调用中包装调用NSURLSession(或URLSession在Swift 3/Swift 4中)的代码.


您可以通过在delegateQueue参数中传递给init方法的队列来控制其完成方法是否在后台线程上执行.如果传入nil,它会创建一个(后台线程)串行操作队列,在其中调用完成方法.如果你传入,NSOperationQueue.mainQueue()那么你的完成委托方法将在主线程上调用,你不必在dispatch_async()调用主线程时包装UI调用.