rib*_*ynn 5 weak-references swift
我发现了一件有趣的事:
class A {
let name = "A"
deinit {
print(self.name)
print(self === Weak.value)
print(Weak.value?.name ?? "nil")
}
}
enum Weak {
static weak var value: A? = nil
}
var a = A()
Weak.value = a
a = A() //to call deinit
Run Code Online (Sandbox Code Playgroud)
输出是
A
false
nil
Run Code Online (Sandbox Code Playgroud)
因此,当一个对象执行其deinit方法时,它可以访问自己的属性.但是这个对象的另一个弱引用已经变为零,即使这个对象实际上还没有在此时被释放.
根据这篇文章,每个对象都有一个侧表.这是我的假设:当一个对象的deinit方法正在执行时,该对象尚未被释放.但是从该对象的side-table到此对象的指针已被删除(或标记为nil).所以没有人可以访问它除了它自己.这实际上是Swift 4的工作原理.
我说的是对的吗?这篇文章不是问题,只是想了解更多细节.如果有人可以解释更多,那就太好了.
| 归档时间: |
|
| 查看次数: |
518 次 |
| 最近记录: |