跨同一服务器

时间:2017-08-01 14:31:10

标签: ios swift rest urlsession

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

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

  1. 使用共享URLSession为每个请求实例化一个全新的URLSessionConfiguration

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

2 个答案:

答案 0 :(得分:4)

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

WWDC2017网络进展,第2部分

"我们已经看到开发人员通过为他们曾经拥有的每个旧的NSURLConnection机械地创建一个URLSession,将旧的NSURLConnection代码转换为新的URLSession代码。这是非常低效和浪费的。对于几乎所有应用程序,您希望拥有的只是一个URLSession,然后可以根据需要创建任意数量的任务。只有当您拥有具有完全不同要求的不同操作组时,您才需要多个URLSession。在这种情况下,您可以创建两个不同的配置对象,并使用这两个配置对象创建两个不同的URLSession。"

虽然介绍本次会议的Apple开发人员回答了一个稍微不同的问题,但他给出的答案显然也适合你的问题。

答案 1 :(得分:0)

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

如果在运行中创建它们会导致同时存在多个相同的实例,也可能有意义。

否则,在需要时创建URLSession,然后在不需要时将其取消分配。

在任何一种情况下,我都不会始终在内存中保留共享的URLSessionConfiguration对象。设置一个可以创建一个的工厂方法,并在需要URLSession时调用它。