ios - NSURLSession 是否发生在单独的线程中?

标签 ios objective-c grand-central-dispatch nsurlsession

我正在设计一个使用 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/

相关文章:

ios - 从 UITableView 选择行时将核心数据对象传递给另一个 View Controller

ios - 我无法从应用委托(delegate)中展示 View Controller

ios - ROT13 编码/解码字符串但不更改括号 [] 内的字符

ios - 关于使这个线程安全但高效的建议?

iphone - 我应该保存哪些私钥才能重建我的 iOS 应用程序?

ios - UINavigationBar 中的雪佛龙在显示弹出窗口时不会变暗

ios - 为什么我的 WKWebView 的 Storyboard表示看起来与模拟器上运行的不同?

iphone - 在某些情况下关闭 UIDocumentInteractionController 将删除 IOS 7 iPad 中呈现 View Controller 的 View

objective-c - 使用 dispatch_once

ios - NSURLConnection 在另一个线程中启动。未调用委托(delegate)方法