我想知道什么时候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
当变量a
's deinit
被称为?如果b = nil
then A
's deinit
没有被叫到。
仅当没有其他对象对它有强引用时,对象才会被取消初始化。
就你而言,b
is not持有参考a
。班上B
is.
Setting b
to nil 不执行任何操作a
因为b
从未提及过a
. b
本质上是无关的。a
and b
是不相关的对象。
现在我们知道了class B
持有一个参考a
,我们能以某种方式破坏这个班级吗B
以便a
可以取消初始化吗?答案是不。a
就像全局范围内的变量一样。a
仅当程序停止时才会被取消初始化。
使某些内容去初始化的另一种方法是将对其的所有引用设置为引用其他内容。但由于在这种情况下a
声明为let
,你无法真正改变它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)