gpt4 book ai didi

释放静态变量时 swift

转载 作者:搜寻专家 更新时间:2023-11-01 05:49:46 27 4
gpt4 key购买 nike

我想知道何时释放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

何时调用变量adeinit?如果 b = nil 那么 Adeinit 没有被调用。

最佳答案

只有当没有其他对象持有对它的强引用时,对象才会被取消初始化。

在您的例子中,b 持有对a 的引用。 B

b 设置为 nil 不会对 a 做任何事情,因为 b 从未持有对 a 的引用. b 本质上是无关紧要的。 ab 是不相关的对象。

现在我们知道 B 持有对a 的引用,我们能否以某种方式销毁类B 以便 a 可以被取消初始化?答案是不。 a 就像全局范围内的变量。 a 只会在程序停止时被取消初始化。

另一种使某些东西被取消初始化的方法是将所有对它的引用设置为引用其他东西。但是因为在这种情况下 a 是用 let 声明的,所以你不能真正改变它。

关于释放静态变量时 swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45956851/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com