0
情况:A类(祖父类)保留B类(父类)和B类(父类)保留C类(孩子类),那么如果我删除B类,那么会发生什么,A类和C类是否有保留周期并导致内存泄漏?当一个班级(层级中)被删除时,我们是否有一个保留周期?
情况:A类(祖父类)保留B类(父类)和B类(父类)保留C类(孩子类),那么如果我删除B类,那么会发生什么,A类和C类是否有保留周期并导致内存泄漏?当一个班级(层级中)被删除时,我们是否有一个保留周期?
要看你怎么去除B类
如果我删除了B类,然后会发生什么
你是什么意思?如果您使用ARC,则不应拨打release
。那么你是如何取消B班的?
由于A类持有的强引用B类,B类的保留计数为1。现在,你可以把B级的refrence计数为0,让B圆弧清洁类的唯一途径是通过设置强B类参考无。
所以,如果你的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,B和C都将具有引用计数1.
var ainstance : A = A()
当我设置AINSTANCE为零这里是电话
序列self.ainstance.binstance = nil
O/P
乙deinited
Çdeinited
它不会破坏,因为它具有引用计数1,因为它是由类保持。所以它会创建强大的参考周期。更多:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html – KKRocks