什么时候持有无主参考的对象被解除分配?

时间:2014-06-09 21:35:50

标签: ios swift

我正在玩无主参考。正如我从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。似乎无主参考似乎是一个强有力的参考。

关于此代码为何有效的任何想法?

1 个答案:

答案 0 :(得分:3)

你的代码很可能只在操场上工作,那里的内存管理有点......模糊。

当我在Xcode中运行它时,它会像你期望的那样崩溃。操场是为了方便测试语法,玩一些类等。它不是最好的地方玩弱/未保留的变量。

我还没有找到任何记录来源描述在游乐场中管理内存的确切方式,但它与实际运行时的内存方式完全不同。