当 class(层次结构的中间)被删除时,我们是否有保留周期?

Do we have a retention cycle when a class (middle of hierarchy) is removed?

情况:ClassA(祖父母class)保留classB(Parentclass)和classB(Parent class) 保留 class C(Child class) 然后如果我删除 class B 那么会发生什么, class A并且class C有一个保留周期并导致内存泄漏?

取决于你是如何删除 Class B.

If I removed class B then what would happen

你这是什么意思?如果您使用的是 ARC,则不应调用 release。那么你是如何删除 class B 的呢?

因为ClassA持有对classB的强引用,classB的retain count是1,现在只能带上[=41的reference count =] B 为 0 并让 ARC 清理 Class B 是通过将 Class B 的强引用设置为 nil。

所以,如果在你的 class A 中,如果你说,

self.classBReference = nil;

然后 Class B 的引用计数变为 0,显然 class B 被释放,因为 Class B 被释放,class C 的引用计数变为 0 因为 Class C 被 class B 强烈持有,class B 不再存在。因此 Class C 现在成为被 ARC 删除的候选人。

概念验证:

这是我的class声明

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 中创建了 Class A 的实例,因此 A、B 和 C 的引用计数都为 1。

var ainstance : A = A()

当我将实例设置为 nil 时,这里是调用顺序

self.ainstance.binstance = nil

O/P

B 已取消

C deinited