我想知道什么时候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)
当变量a的deinit叫?如果b = nil随后A的deinit不叫.
只有当没有其他东西强烈引用它时,对象才会被取消初始化.
对你来说,b是不是抱着一个参考a.这堂课B 是.
设置b为nil没有任何作用,a因为b从未参与过a.b基本上是无关紧要的.a并且b是非相关对象.
既然我们知道该类 B正在引用a,那么我们可以以某种方式破坏该类B以便a可以对其进行去初始化吗?答案是不.a就像全球范围内的变量一样.a只有在程序停止时才会取消初始化.
另一种使取消初始化的方法是将所有引用设置为引用其他内容.但是因为在这种情况下a声明let,你不能真正改变它.
| 归档时间: |
|
| 查看次数: |
1111 次 |
| 最近记录: |