【问题标题】:Does extension return new instance each time扩展是否每次都返回新实例
【发布时间】:2019-01-20 09:41:23
【问题描述】:

考虑这种情况,在extension 中声明的变量,像这样。

extension UIViewController {
    var apiClient: APIClient {
        return APIClientImplementation()
    }
}

每次我从不同的UIViewController 调用它时,这个扩展是否会返回一个新实例,如果是这样,这会如何影响内存?

如果不是这会导致问题,我会为我正在使用此实例的所有 UIViewController 获取相同的实例,并且您可以告诉它过去是一个 APIClient 实例注入到GateWay 类的另一个实例中,这会导致将来出现问题吗?

注意GateWay 类是我用来执行 API 请求的类实例,每个服务块都有自己的网关。

我知道我可以使用协议在所需的UIViewController 上应用规则以每次创建实例。

我正在努力实现的是在未来编写更少的代码和更少的问题,并删除不必要的代码块。

【问题讨论】:

  • 虽然我无法理解这个问题,但基本上apiClient 确实每次都会返回一个新实例......默认情况下,它应该在视图控制器获取时被释放解除分配。
  • 所以在任何时候都不会出现内存拥挤或崩溃,因为这个实例可以被带到后台线程工作

标签: swift memory foundation swift-extensions


【解决方案1】:

是的,每次您从任何viewController 访问apiClient 时,都会返回一个新的APIClient 实例。

由于apiClient 变量是get only,所以这本身不会导致任何内存问题。

【讨论】:

  • 这样我就可以在后台线程中毫无问题地使用它了?
  • 看起来这不会对 UI 做任何事情,所以是的,它应该能够在后台工作而不会出现任何问题。但如果不了解所有用例,很难说它永远不会产生任何问题。
猜你喜欢
  • 2018-10-16
  • 2016-10-21
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多