默认配置下共享的URLSession与URLSession

时间:2019-09-17 10:02:31

标签: ios swift macos

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

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

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

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

这两种方法有什么区别?

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

3 个答案:

答案 0 :(得分:1)

共享会议的局限性

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

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

有关更多信息:https://developer.apple.com/documentation/foundation/urlsession/1409000-shared

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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