我正在设计一个使用 NSURLSession 的应用程序,并考虑将其与 Grand Central Dispatch 放在不同的线程中,但如果 NSURLSession 在后台自动执行此操作,那么我就不必使用 GCD,对吗?
那么换句话说,NSURLSession 是否会在后台自动使用 Grand Central Dispatch,所以我们不必担心?
最佳答案
是的,
NSURLSession(Swift 中的 URLSession)在后台线程中工作。下载总是在后台线程上异步进行。
编辑:
没有理由在 GCD 调用中包装调用 NSURLSession
(或 Swift 3 或更高版本中的 URLSession
)的代码。
您可以通过在delegateQueue
参数中传递给init 方法的队列来控制其完成方法是否在后台线程上执行。如果您传入 nil,它会创建一个(后台线程)串行操作队列,您的完成方法将在其中调用。如果您传入 NSOperationQueue.mainQueue()
(OperationQueue.mainQueue()
在最新版本的 Swift 中),那么您的完成委托(delegate)方法/闭包将在主线程上调用,并且您不必将 UI 调用包装在对主线程的 dispatch_async()
调用中。
关于ios - NSURLSession 是否发生在单独的线程中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30854510/