情况:A类(祖父母类)保留B类(父类),B类(父类)保留C类(子类)然后如果我删除B类那么会发生什么,A类和C类是否有保留周期并导致内存泄漏?
问问题
34 次
1 回答
0
取决于您如何删除 B 类。
如果我删除了 B 类,那么会发生什么
你是什么意思 ?如果您使用 ARC,则不应调用release
. 那么您是如何删除 B 类的呢?
因为 A 类持有对 B 类的强引用,所以 B 类的保留计数为 1。现在您可以将 B 类的引用计数设为 0 并让 ARC 清理 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 类的实例,结果 A、B 和 C 的引用计数都为 1。
var ainstance : A = A()
当我将 ainstance 设置为 nil 时,这里是调用顺序
self.ainstance.binstance = nil
输出/输出
B 定义
C定义
于 2017-06-13T07:04:49.523 回答