同一服务器的不同 REST 端点的 URLSession

URLSession across different REST endpoints for the same server

我有一个应用程序可以从一堆不同的视图控制器对同一服务器进行一大堆不同的 REST 调用。关于 URLSession 的最佳实践是什么:共享同一个 URLSession 对象?或者只是 URLSessionConfiguration 对象?或者两者都不重要?

例如,当向端点发出请求时,我应该

  1. 实例化一个全新的 URLSession 每个请求与共享 URLSessionConfiguration?

  2. 为当前活动的应用程序实例实例化一个 URLSession 一次,并在所有请求中重复使用它?

只有当您需要在 class 上使用同时影响多个任务的方法时,长期共享的 URLSession 对象才有意义。例如,如果您需要调用 getTasksWithCompletionHandler(_:)finishTasksAndInvalidate(),会话对象需要存在足够长的时间以涵盖您希望这些方法影响的所有任务。

如果即时创建它们会导致同时拥有多个相同的实例,这也可能有意义。

否则,在需要时创建一个 URLSession,然后在不需要时释放它。

无论哪种情况,我都不会一直在内存中保留一个共享的 URLSessionConfiguration 对象。设置一个可以创建一个的工厂方法,并在需要 URLSession.

时调用它

创建多个 URLSession 不是最佳做法。 Apple 建议尽可能只创建一个:

WWDC2017 网络进展,第 2 部分

"We have seen developers that take their old NSURLConnection code and convert it to the new URLSession code by mechanically making a URLSession for every old NSURLConnection they used to have. This is very inefficient and wasteful. For almost all of your apps what you want to have is just one URLSession, which can then have as many tasks as you want. The only time you would want more than one URLSession is when you have groups of different operations that have radically different requirements. And in that case you might create two different configuration objects and create two different URLSessions using those two configuration objects."

虽然提出此问题的 Apple 开发人员 session 回答的问题略有不同,但显然他给出的答案也适用于您的问题。