ios - 持有无主引用的对象何时被释放?

标签 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。似乎无主引用就像是强引用一样。

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

最佳答案

您的代码很可能只能在 playground 中运行,那里的内存管理有点……模糊。

当我在 Xcode 中运行它时,它会像您预期的那样崩溃。 playground 旨在让测试语法、玩一些类等变得容易。它不是玩弱/未保留变量的最佳场所。

我还没有找到任何文档来源来描述内存在 playground 中的管理方式,但它肯定与实际运行时的方式不同。

关于ios - 持有无主引用的对象何时被释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24129472/

相关文章:

ios - 如何正确地将字符串转换为日期?

swift - 将注释更改为引脚

ios - Swift - UIAlertController 后操作

ios - 如何将值从 NavigationController 推送到 rootViewController?

ios - 管理全局状态(没有单例)

swift - 使用 Coder 初始化 PFTableViewCell

ios - Swift URL查询字符串获取参数

ios - XLPagerTabStrip - 选定的选项卡选择不起作用

ios - 将 View 拆分为四个宽度为 25% 的 subview

ios - 无法将来自 Web 服务的数据显示到 UITableView (ASIHTTPRequest)