You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中ParentClass与ChildClass是否存在引用循环的技术咨询

Swift中ParentClass与ChildClass是否存在引用循环的技术咨询

嘿,我来帮你理清这个问题哈!咱们先把代码贴出来方便分析:

class ParentClass {
    lazy var child: ChildClass = {
        return ChildClass()
    }()
    
    func showChildClassName() {
        child.showParentClassName()
    }
}

class ChildClass {
    var parentClass: ParentClass = {
        return ParentClass()
    }()
    
    func showParentClassName() {
        print("Parent class name")
    }
}

首先得纠正你的判断——这段代码不会产生引用循环,原因咱们拆解来看:

  • 当你创建一个ParentClass实例(比如叫p)时,它的child是懒加载属性,只有第一次被访问时才会初始化;
  • 当调用p.showChildClassName()时,才会触发child的创建,生成一个ChildClass实例(比如叫c);
  • 重点来了:c的parentClass是一个全新的ParentClass实例(不是原来的p),也就是说c持有的是另一个独立的ParentClass对象,而非持有它的p。

这时候的引用关系是:p → c → 新的ParentClass实例(暂称p1),而p1的child还没被触发初始化,整个链条里没有形成“A持有B,同时B持有A”的闭环,自然不会产生引用循环。

如果想要产生引用循环,得让ChildClass的parentClass指向创建它的那个ParentClass实例(比如通过初始化参数传递),这时候才会出现互相持有的闭环情况。

备注:内容来源于stack exchange,提问作者Sajal Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:38:05