Я сейчас в порядке Apple Documentation. Вот мой вопрос:ARC (Automatic Reference Counting) in Action
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
}
}
После reference1
равна nil
, ARC освобождает экземпляр и печатает "John Appleseed is being deinitialized"
Не должно быть после reference3 = nil
освобождает?
@JakubVano Чтобы получить больше информации я бегу этот код в viewDidLoad() метод. Однако reference3 не равен нулю, компилятор освобождает экземпляр, даже если существует сильная ссылка. – ridvankucuk
Этот снимок экрана добавил беспорядок, а не ясность. – nhgrif
Как вы определяете * точный * момент, когда происходит 'deinit'? Я ожидаю, что он будет вызван, как только метод вернется (и определенно не через мгновение). Его можно назвать раньше из-за какой-то оптимизации, но он определенно не собирается обходить после того, как метод вернется. – nhgrif