【问题标题】:Should I use weak self in variable?我应该在变量中使用弱自我吗?
【发布时间】:2017-04-11 14:51:51
【问题描述】:

我的属性 getter 引用 self 的情况下,我怀疑它会持有 self 并且永远不会释放它。如果我在这种情况下没有犯错,请解释一下?

 private var storyboard: UIStoryboard {
    get {
      return UIStoryboard(name: "Login", bundle: Bundle(for: type(of:self)))
    }
 }

【问题讨论】:

  • 属性 getter 不是闭包,编译器甚至不会让你使用 unowned self。
  • 计算属性只不过是一个美化的(一对)方法——没有保留周期问题。你测试过吗(即在deinit 中添加print)?
  • @Hamish 是的,我有与包含此属性的类相关的内存泄漏。
  • @OlegGordiichuk 您的问题可能出在其他地方——我认为您向我们展示的代码没有任何问题。如果你能把它减少到minimal reproducible example,那就太好了。
  • @Hamish thx 我发现与 CTFontManagerRegisterGraphicsFont 相关的问题。你是对的。能否请您回答,以便我接受。

标签: ios swift memory-management


【解决方案1】:

您没有犯错——计算属性只不过是一种美化的方法/方法对。就其本身而言,没有保留周期问题。

self 只是在调用计算属性的 getter 或 setter 时传递的隐式参数,并且将是正在访问该属性的实例——它不会被属性本身存储或捕获。

【讨论】:

    猜你喜欢
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2013-02-24
    • 1970-01-01
    • 2014-04-04
    • 2016-02-02
    • 1970-01-01
    相关资源
    最近更新 更多