swift - Deinit 方法从未被调用 - Swift Playground

标签 swift memory-management swift-playground

在下一个代码中,我尝试调用 deinit 方法来释放对 Person Class 实例 Mark 实例的所有引用,但 deinit 从未被调用。为什么?

class Person{

    let name:String

    init(name:String){
        self.name = name
        println("Person created")
    }

    deinit {

        println("Person \(name) deinit")
    }
}

var Mark:Person? = Person(name:"Mark")
Mark = nil // Shouldn't the person deinit method be called here? It doesn't.

最佳答案

Xcode 的 Swift 的 Playgrounds 不像常规应用程序那样工作;它们不仅仅运行一次。创建的对象保留在内存中并且可以被检查,直到您更改代码,此时整个 Playground 将被重新评估。发生这种情况时,所有先前的结果都将被丢弃,虽然所有对象都将被释放,但您将看不到任何输出。

您的代码是正确的,但 Playgrounds 不适合测试与内存管理相关的内容。

这是一个相关的问题:Memory leaks in the swift playground / deinit{} not called consistently

关于swift - Deinit 方法从未被调用 - Swift Playground,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55444913/

相关文章:

ios - 以编程方式动态居中 2 行文本,每行长度大致相等

Swift 从另一个文件调用完成处理程序失败

objective-c - 我是否需要从 dealloc 中的 super View 中删除 View ?

swift - 为什么 Bool "AnyObject"而不是 "Any"?

arrays - 如何从由类中的函数组成的数组中删除一个项目?

Swift:检查字典值的类型

for-loop - Swift 中的 For 循环

swift - 更改 Swift Playground 中实时 View 的框架

c++ - 我的代码中是否存在内存泄漏?

c - 如何在 C 中为 int(不是 int*)数组动态分配内存?