【问题标题】:Does Passing Self Through A Protocol Cause Memory Leaks?通过协议传递自我会导致内存泄漏吗?
【发布时间】:2019-03-04 00:48:16
【问题描述】:

我很难理解这个

假设我有一个自定义视图,其中包含要由另一个类(视图控制器)使用的协议

protocol MyViewDelegate : AnyObject {
    func parentNeedsToTakeAction(sender: MyView)
}

class MyView : UIView {
  ...
  weak var delegate : MyViewDelegate?
  ....
  func initiateCallBack(){
      delegate?.parentNeedsToTakeAction(self)
  }
}

并且视图控制器符合这个视图的委托

在我将 self 传回 VC 之前,我知道 VC 持有对视图的强引用,而视图只持有对 VC 的弱引用(通过委托)

但是之后会发生什么?视图的 ARC 现在是 2 还是仍然是 1,VC 持有 1 或 2 个对视图的强引用?

如果在 VC 中我继续采取行动,然后从它的视图中删除发送者(子视图),子视图是否会从内存中释放?

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    只有当引用的接收者在一段时间内保留该引用时,才会导致内存泄漏。当您调用delegate?.parentNeedsToTakeAction(self) 时,方法parentNeedsToTakeAction 会运行非常短的时间然后结束。随着时间的推移,不会保留对self 的引用,因此没有泄漏的危险。

    【讨论】:

      猜你喜欢
      • 2012-11-04
      • 2021-03-23
      • 2021-09-25
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2011-06-16
      相关资源
      最近更新 更多