共享的URLSession 和具有默认配置的 URLSession 有什么区别?
在我的应用中,我正在使用 URLSession.shared 向服务器发送请求。现在,我尝试将其更改为 URLSession.init(配置:URLSessionConfiguration.default)。
但是如果我使用 URLSession.init(configuration:URLSessionConfiguration.default),我的所有请求都将花费更多的时间来加载。
与 URLSession.shared 相比, URLSession.init(配置:URLSessionConfiguration.default)需要更多的时间来加载请求。(共享会话是5到10倍比使用默认配置的URLSession快)。
这两种方法有什么区别?
为什么具有默认配置的URLSession需要更多的时间来加载请求?
答案 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的内容提取到内存中。 与其他会话类型不同,您无需创建共享会话。您只需直接使用此属性即可访问它。因此,您不提供委托或配置对象。