【问题标题】:Shared URLSession vs URLSession with default configuration使用默认配置共享 URLSession 与 URLSession
【发布时间】:2020-01-18 04:18:38
【问题描述】:

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

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

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

URLSession.shared 相比,URLSession.init(configuration: URLSessionConfiguration.default) 需要更多时间来加载请求。(Shared Session 是 5 到 10 次比使用默认配置的 URLSession 更快)。

这两种方法有什么区别?

为什么使用默认配置的 URLSession 会花费更多时间来加载请求?

【问题讨论】:

  • 请分享代码 - 我非常怀疑 URLSessionConfiguration.default 是否较慢

标签: ios swift macos


【解决方案1】:

共享会话的限制

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

换句话说,如果您使用缓存、cookie、身份验证或自定义网络协议做任何事情,您可能应该使用默认会话而不是共享会话。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      URLSession.init():由子类实现,用于在分配内存后立即初始化一个新对象(接收者)。 请注意:对象在初始化之前还不能使用。

      URLSession.shared:对于基本请求,URLSession 类提供了一个共享的单例会话对象,它为您提供了一个合理的默认行为来创建任务。使用共享会话只需几行代码即可将 URL 的内容提取到内存中。 与其他会话类型不同,您无需创建共享会话;您只需直接使用此属性即可访问它。因此,您无需提供委托或配置对象。

      【讨论】:

        猜你喜欢
        • 2020-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-13
        • 1970-01-01
        • 2017-01-30
        • 1970-01-01
        相关资源
        最近更新 更多