Obecnie śledzę numer Apple Documentation. Oto moje pytanie:Łuk ARC (automatyczne liczenie odniesienia) w akcji
class Person {
let name: String
init(name: String) {
self.name = name
println("\(name) is being initialized")
}
deinit {
println("\(name) is being deinitialized")
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var reference1: Person?
var reference2: Person?
var reference3: Person?
reference1 = Person(name: "John Appleseed")
// prints "John Appleseed is being initialized
reference2 = reference1
reference3 = reference1
reference1 = nil
reference2 = nil
}
}
Po reference1
równa nil
, ARC dealokuje instancji i wydruki "John Appleseed is being deinitialized"
Jeżeli nie byłoby dealokuje po reference3 = nil
?
@JakubVano Aby uzyskać więcej informacji Używam tego kodu w viewDidLoad metoda(). Jednak referencja 3 nie jest zerowa, ponieważ kompilator zwolni instancję, nawet jeśli istnieje odwołanie Strong. – ridvankucuk
Ten zrzut ekranu dodał bałagan, a nie czystość. – nhgrif
Jak określasz * dokładny * moment, w którym pojawia się 'deinit'? Oczekuję, że zostanie wywołany, gdy tylko metoda powróci (i zdecydowanie nie za chwilę). Można go nazwać wcześniej z powodu jakiejś optymalizacji, ale na pewno nie będzie się kręcić po powrocie metody. – nhgrif