【问题标题】:URLSession across different REST endpoints for the same server跨同一服务器的不同 REST 端点的 URLSession
【发布时间】:2017-08-02 04:01:44
【问题描述】:

我有一个应用程序,它从一堆不同的视图控制器向同一服务器发出一大堆不同的 REST 调用。关于URLSession 的最佳实践是什么:共享同一个 URLSession 对象?还是只是 URLSessionConfiguration 对象?还是两者都无所谓?

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

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

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

【问题讨论】:

  • 你好,只是一个建议,但你为什么不使用Alomefire?它会自动处理所有事情,您不必担心
  • @MohammadBashirSidani Alamofire 只是 URLSession 的包装。如果您使用 Alamofire,您仍然需要考虑如何处理会话。
  • 嘿,安迪,你能接受我的回答吗?它是“来自马的嘴”。谢谢。

标签: ios swift rest urlsession


【解决方案1】:

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

WWDC2017 网络进展,第 2 部分

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

虽然演示本次会议的 Apple 开发人员回答了一个略有不同的问题,但显然他给出的答案也适合您的问题。

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 2011-04-21
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多