gpt4 book ai didi

ios - 通过协议(protocol)传递 self 会导致内存泄漏吗?

转载 作者:行者123 更新时间:2023-11-28 09:48:12 24 4
gpt4 key购买 nike

我很难理解这个问题

假设我有一个带有协议(protocol)的自定义 View ,供另一个类( View Controller )使用

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

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

并且 View Controller 符合这个 View 的委托(delegate)

在我将 self 返回给 VC 之前,我知道 VC 持有对 View 的强引用,而 View 仅持有对 VC 的弱引用(通过委托(delegate))

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

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

最佳答案

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

关于ios - 通过协议(protocol)传递 self 会导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54975286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com