我在玩无主引用。正如我从 WWDC 视频中了解到的那样,无主引用不能为 nil
,并且它们不会增加它们引用的任何对象的保留计数。我认为如果一个无主引用被释放,那么持有无主引用的对象也会被释放。
考虑以下代码:
class Parent {
var child : Child?
func foo() {
println("Hello")
}
}
class Child {
unowned let parent : Parent
init(parent: Parent) {
self.parent = parent
}
}
var parent : Parent? = Parent()
parent!.child = Child(parent: parent!)
weak var child = parent!.child
parent = nil
child!.parent.foo()
这段代码有效!为什么 child
存在,而且,为什么 parent
明明还存在?我原以为设置parent = nil
后,child
也会是nil
。似乎无主引用就像是强引用一样。
关于此代码为何有效的任何想法?
最佳答案
您的代码很可能只能在 playground 中运行,那里的内存管理有点……模糊。
当我在 Xcode 中运行它时,它会像您预期的那样崩溃。 playground 旨在让测试语法、玩一些类等变得容易。它不是玩弱/未保留变量的最佳场所。
我还没有找到任何文档来源来描述内存在 playground 中的管理方式,但它肯定与实际运行时的方式不同。
关于ios - 持有无主引用的对象何时被释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24129472/