我正在玩无主参考。正如我从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
。似乎无主参考似乎是一个强有力的参考。
关于此代码为何有效的任何想法?
答案 0 :(得分:3)
你的代码很可能只在操场上工作,那里的内存管理有点......模糊。
当我在Xcode中运行它时,它会像你期望的那样崩溃。操场是为了方便测试语法,玩一些类等。它不是最好的地方玩弱/未保留的变量。
我还没有找到任何记录来源描述在游乐场中管理内存的确切方式,但它与实际运行时的内存方式完全不同。