我有一个应用程序,可以从一堆不同的视图控制器对同一台服务器进行大量不同的REST调用。关于URLSession
的最佳做法是什么:共享相同的URLSession对象?或者只是URLSessionConfiguration对象?或者两者都无关紧要?
例如,在向端点发出请求时,我应该
使用共享URLSession
为每个请求实例化一个全新的URLSessionConfiguration
?
为当前有效的应用实例实例化一次URLSession
,并在所有请求中重复使用它?
答案 0 :(得分:4)
创建多个URLSession不是最佳做法。 Apple建议尽可能只创建一个:
WWDC2017网络进展,第2部分
"我们已经看到开发人员通过为他们曾经拥有的每个旧的NSURLConnection机械地创建一个URLSession,将旧的NSURLConnection代码转换为新的URLSession代码。这是非常低效和浪费的。对于几乎所有应用程序,您希望拥有的只是一个URLSession,然后可以根据需要创建任意数量的任务。只有当您拥有具有完全不同要求的不同操作组时,您才需要多个URLSession。在这种情况下,您可以创建两个不同的配置对象,并使用这两个配置对象创建两个不同的URLSession。"
虽然介绍本次会议的Apple开发人员回答了一个稍微不同的问题,但他给出的答案显然也适合你的问题。
答案 1 :(得分:0)
如果您需要在该类上同时使用影响多个任务的方法,那么长期共享的URLSession
对象才有意义。例如,如果您需要调用getTasksWithCompletionHandler(_:)
或finishTasksAndInvalidate()
,则会话对象需要存在足够长的时间,以涵盖您希望这些方法影响的所有任务。
如果在运行中创建它们会导致同时存在多个相同的实例,也可能有意义。
否则,在需要时创建URLSession
,然后在不需要时将其取消分配。
在任何一种情况下,我都不会始终在内存中保留共享的URLSessionConfiguration
对象。设置一个可以创建一个的工厂方法,并在需要URLSession
时调用它。