Denit方法从未被调用-Swift

Denit方法从未被调用-Swift,swift,memory-management,swift-playground,Swift,Memory Management,Swift Playground,在下一段代码中,我试图调用deinit方法,释放对Person类实例标记的所有引用,但从未调用deinit。为什么? class Person{ let name:String init(name:String){ self.name = name println("Person created") } deinit { println("Person \(name) deinit") } } va

在下一段代码中,我试图调用deinit方法,释放对
Person类
实例
标记
的所有引用,但从未调用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.

用于Swift的Xcode的
操场
不像普通的应用程序那样工作;它们不会只运行一次。创建的对象保留在内存中,可以进行检查,直到您更改代码,此时整个游乐场将重新评估。当这种情况发生时,所有以前的结果都将被丢弃,而所有对象都将被释放,您将看不到任何来自该结果的输出

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


这里有一个相关的SO问题:

如果创建这样的对象,将调用Denit

_ = Person(name:"Mark")

当您像这样忽略变量时,会调用Deinit

import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
_ = Owner()
PlaygroundPage.current.finishExecution()
业主类别-

public class Owner {
    public var car: Car?
    public init (_ car: Car? = nil) {
        self.car = car
        print ("Owner got allocated")
    }

    deinit {
        print ("owner got deallocated")
    }
}
//印刷品- 所有者已被分配
游乐场的主人被解约了

游乐场的问题曾经是个问题。对于99%的内存管理案例,它们的工作方式与普通项目一样。随着时间的推移,操场有了很大的改善


这样的问题应该不再存在,游乐场可以可靠地使用。

Denit正在调用相同的代码。可能这是游乐场的问题,我离开了游乐场测试,以获得更稳定的Xcode版本。你可以用老方法检查代码,正确调用了deinit。不能用操场测试圆弧!在XCode 10中,称为去离子剂!