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
相关产品推荐
相关产品推荐

