共享 URLSession 与默认配置的 URLSession

sAs*_*uKe 7 macos ios swift

共享 URLSession默认配置的 URLSession有什么区别?

在我的应用程序中,我使用URLSession.shared向服务器发送请求。现在我试图将其更改为URLSession.init(configuration: URLSessionConfiguration.default)

但如果我使用URLSession.init(configuration: URLSessionConfiguration.default)我的所有请求都需要更多时间来加载。

URLSession.shared相比,URLSession.init(configuration: URLSessionConfiguration.default)需要更多时间来加载请求。(共享会话比默认配置的 URLSession 快 5 到 10 倍)。

这两种方法有什么区别?

为什么默认配置的 URLSession 需要更多时间来加载请求?

小智 6

共享会话的限制

\n\n
    \n
  • 您不\xe2\x80\x99t 提供委托或配置对象。
  • \n
  • 您可以\xe2\x80\x99t 在数据从服务器到达时增量获取数据。
  • \n
  • 您可以\xe2\x80\x99t 显着自定义默认连接行为。
  • \n
  • 您执行身份验证的能力是有限的。
  • \n
  • 当您的应用程序运行时,您无法执行后台下载或上传。
  • \n
\n\n

换句话说,如果您\xe2\x80\x99 使用缓存、cookie、身份验证或自定义网络协议执行任何操作,您可能应该使用默认会话而不是共享会话。

\n\n

欲了解更多信息:https ://developer.apple.com/documentation/foundation/urlsession/1409000-shared

\n


小智 2

URLSession 有一个用于基本请求的单例共享会话(没有配置对象)。它\xe2\x80\x99 不像您创建的会话那样可定制,但如果您的要求非常有限,它可以作为一个很好的起点。URLSession.shared 是已经创建的对象,不需要额外的时间进行配置,问题是默认超时的默认值

\n\n

对我来说,最佳实践之一是创建 URLsession 的共享实例并将其用于多个任务。不需要开销配置,因为通常您需要对 api 进行相同的配置。\n这样做的好处是我只需创建会话一次,这样就可以节省相同代码的重复以及每次再次初始化相同内容的过程。 API 请求。如果您需要对会话进行更多自定义配置,这将更有帮助。

\n