Moje globalne Swapy nie są deinicjalizowane.Swift Deinitialization of Globals
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")
Używam tego w osobnym pliku binarnego (bo apparently the playground has issues with deinit) z wyłączonymi optymalizacje, korzystając 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
Uwaga brakujące Globalny jest deinitialized.
Nie mogę nawet dowiedzieć się, czy jest to oczekiwane zachowanie lub błąd, więc jeśli jest to pierwsze, docenione zostaną odniesienia do odpowiedniego legalese.
Po co globalnie reinicjować? To własność skutecznie, prawda? – Woodstock
Oba aktualne odpowiedzi wspominają, że nie jest to całkowicie nieoczekiwane, biorąc pod uwagę podstawową implementację. Jak stwierdziłem w pytaniu, jeśli tak jest, to miałem nadzieję na bardziej jednoznaczny cytat. Powodem, dla którego jest to problem, jest to, że globalny może śledzić jakiś zasób (plik, połączenie z bazą danych itp.), A biorąc pod uwagę obecne zachowanie, obowiązek byłby na programerze, aby upewnić się, że nie ma takich "właścicieli zasobów" jako globalny. – Manav