2017-06-13 23 views
0

情况:A类(祖父类)保留B类(父类)和B类(父类)保留C类(孩子类),那么如果我删除B类,那么会发生什么,A类和C类是否有保留周期并导致内存泄漏?当一个班级(层级中)被删除时,我们是否有一个保留周期?

+0

它不会破坏,因为它具有引用计数1,因为它是由类保持。所以它会创建强大的参考周期。更多:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html – KKRocks

回答

0

要看你怎么去除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

相关问题