情况:A类(祖父母类)保留B类(父类),B类(父类)保留C类(Child类)然后如果我删除了B类那么会发生什么,A类和C类是否有保留周期并导致内存泄漏?
答案 0 :(得分:0)
取决于你是如何删除B类的。
如果我删除了B类,那么会发生什么
你是什么意思?如果您使用ARC,则不应该致电release
。那么你是如何删除B类的呢?
因为A类持有对B类的强引用,所以B类的保留计数为1.现在唯一的方法是将B类的参考数量设为0并让ARC清除B类将B类的强引用设置为nil。
所以,如果在你的A班,如果你说,
self.classBReference = nil;
然后,B类的引用计数变为0,显然B类被解除分配,并且因为B类被解除分配,C类的引用计数变为0,因为C类强烈地被B类保持,B类不再存在。因此,C类现在成为ARC要删除的候选者。
概念验证:
这是我的班级宣言
class A {
var binstance : B? = B() //Declared as optional because I need to set the reference to nil later :)
deinit {
print("A deinited")
}
}
class B {
var cinstance = C()
deinit {
print("B deinited")
}
}
class C {
deinit {
print("C deinited")
}
}
现在我在VC中创建了A类的实例,结果A,B和C都将引用计数为1。
var ainstance : A = A()
当我将ainstance设置为nil时,这是一系列调用
self.ainstance.binstance = nil
O / P
B deinited
C deinited