当静态变量被释放时swift

Wil*_* Hu 1 swift

我想知道什么时候static会发布变量,所以我创建如下:

class A {
    init() {
        print("A init")
    }

    deinit {
        print("A deinit")
    }
}

class B {
    static let a = A()

    deinit {
        print("B deinit")
    }

    init() {
        print("B init")
    }
}

var b: B? = B()
B.a
b = nil
Run Code Online (Sandbox Code Playgroud)

当变量adeinit叫?如果b = nil随后Adeinit不叫.

Swe*_*per 8

只有当没有其他东西强烈引用它时,对象才会被取消初始化.

对你来说,b不是抱着一个参考a.这堂课B .

设置b为nil没有任何作用,a因为b从未参与过a.b基本上是无关紧要的.a并且b是非相关对象.

既然我们知道该类 B正在引用a,那么我们可以以某种方式破坏该类B以便a可以对其进行去初始化吗?答案是不.a就像全球范围内的变量一样.a只有在程序停止时才会取消初始化.

另一种使取消初始化的方法是将所有引用设置为引用其他内容.但是因为在这种情况下a声明let,你不能真正改变它.