在下一个代码中,我尝试调用 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/