Il metodo Deinit non viene mai chiamato – Campo da giuoco Swift

Nel prossimo codice sto provando a chiamare il metodo deinit rilasciando tutti i riferimenti al Mark dell’istanza della Person Class ma il deinit non viene mai chiamato. Perché?

 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’s Playgrounds per Swift non funziona come le app normali; non vengono eseguiti solo una volta. Gli oggetti creati rimangono in memoria e possono essere controllati fino a quando non si cambia il codice, a quel punto viene rivalutato l’intero parco giochi. Quando ciò accade, tutti i risultati precedenti vengono scartati e mentre tutti gli oggetti saranno deallocati, non vedrai alcun output da quello.

Il tuo codice è corretto, ma Playgrounds non è adatto a testare cose relative alla gestione della memoria.

Ecco una domanda SO correlata: Perdite di memoria nel campo da giuoco rapido / deinit {} non chiamato in modo coerente

Deinit chiamerà se creare oggetti come questo

 _ = Person(name:"Mark")