Метод Deinit никогда не называется - 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.

Ответы

Ответ 1

Xcode Playgrounds для Swift не работает, как обычные приложения; они не запускаются только один раз. Созданные объекты остаются в памяти и могут быть проверены до тех пор, пока вы не измените код, после чего вся игровая площадка будет переоценена. Когда это произойдет, все предыдущие результаты будут отброшены, и пока все объекты будут освобождены, вы не увидите никаких результатов.

Ваш код верен, но игровые площадки не подходят для проверки вещей, связанных с управлением памятью.

Вот связанный вопрос SO: Утечка памяти на быстрой игровой площадке /deinit {} не вызвана последовательно

Ответ 2

Deinit вызывается, если создать объект, подобный этому

_ = Person(name:"Mark")