通过协议传递自我会导致内存泄漏吗?

时间:2019-03-04 00:48:17

标签: ios swift

我在解决这个问题时遇到了一些困难

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

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

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

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

在将自身传递回VC之前,我已经知道VC拥有对视图的强引用,而视图仅拥有对VC的弱引用(通过委托)

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

如果在VC中我继续采取措施,然后从其视图中删除发件人(子视图),那么子视图是否会从内存中重新分配?

1 个答案:

答案 0 :(得分:5)

仅当引用的接收者在一段时间内保留引用后,才会引起内存泄漏。当您调用delegate?.parentNeedsToTakeAction(self)时,方法parentNeedsToTakeAction会运行很短的时间,然后结束。随着时间的流逝,不会保留对self的引用,因此没有泄漏的危险。