Meine Swift Globals werden nicht deinitialisiert.Schnelle Deinitialisierung von Globalen
class Person {
let name: String
init(name: String) {
self.name = name
println("\(name) is being initialized")
}
deinit {
println("\(name) is being deinitialized")
}
}
func local() {
let person = Person(name: "Local")
}
local()
var personp: Person? = Person(name: "Optional Global")
personp = nil
var person = Person(name: "Global")
ich dies in einem eigenständigen binären leite (weil apparently the playground has issues with deinit) mit deaktiviert Optimierungen, mit Xcode6-Beta3:
> xcrun swift -O0 arc.swift && ./arc
Local is being initialized
Local is being deinitialized
Optional Global is being initialized
Optional Global is being deinitialized
Global is being initialized
Notiere die fehlende Globale wird deinitialisiert wird.
Ich kann nicht einmal herausfinden, ob dies erwartetes Verhalten oder ein Fehler ist, also wenn es der ehemalige ist, dann werden Verweise auf die relevante Rechtsprache geschätzt.
Warum sollte global reinit werden? Es ist eine Eigenschaft, nicht wahr? – Woodstock
Beide aktuellen Antworten erwähnen, dass dies angesichts der zugrunde liegenden Implementierung nicht völlig unerwartet ist. Wie ich in der Frage gesagt habe, wenn das der Fall ist, dann habe ich auf ein definitiveres Zitat gehofft. Der Grund, warum dies ein Problem ist, ist, dass das Globale irgendeine Art von Ressource (Datei, Datenbankverbindung usw.) verfolgen kann, und angesichts des aktuellen Verhaltens wäre es für den Programmierer wichtig sicherzustellen, dass keine solchen "Ressourcenbesitzer" gehalten werden als global. – Manav