当该对象的deinit正在执行时,Swift弱引用为nil

时间:2018-03-26 13:53:29

标签: swift weak-references

我发现了一件有趣的事情:

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

输出

A
false
nil

因此,当一个对象执行其deinit方法时,它可以访问自己的属性。但是这个对象的另一个弱引用已经变为零,即使这个对象实际上还没有在此时被释放。

根据This article,每个对象都有一个边桌。这是我的假设:当一个对象的deinit方法正在执行时,该对象尚未被释放。但是从该对象的side-table到此对象的指针已被删除(或标记为nil)。所以没有人可以访问它除了它自己。这实际上是Swift 4的工作原理。

我说的是对的吗?这篇文章不是问题,只是想了解更多细节。如果有人可以解释更多,那就太好了。

0 个答案:

没有答案