Если я создаю новый проект «Single View Application» с xcode (6.3.2) и добавлю только функцию deinit в ViewController. Запустить приложение, закрыть приложение. Деинит никогда не называется! Я тестировал его с помощью нескольких устройств и симулятора.deinit in empty swift Project не называется
deinit {
println("deinit:")
}
Почему? Это стандартное поведение? Что я могу сделать, чтобы это сработало?
/* Редактировать */После прочтения комментариев я помещаю этот код в свой Viewcontroller.
import UIKit
class A {
func test() {
println("A test")
}
deinit {
println("A deinit")
}
}
class ViewController: UIViewController {
var a:A? = A()
override func viewDidLoad() {
super.viewDidLoad()
println("ViewController viewDidLoad")
a?.test()
}
override func viewDidDisappear(animated:Bool) {
println("ViewController viewDidDisappear")
a = nil
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
println("ViewController didReceiveMemoryWarning")
}
deinit {
println("ViewController deinit")
a = nil
}
}
Теперь я получаю
ViewController viewDidLoad:
A test
ViewController viewDidDisappear:
A deinit
Означает ли это, что я должен очистки мои объекты вручную внутри вызова viewDidDisappear, поскольку контролеры вид Deinit функция не является надежным?
Есть ли момент, когда этот ViewController выходит из памяти? Вы заменяете этот viewController другим? –
Нет. Все, что я сделал, это добавить deinit. Ничего больше. Вы можете протестировать его, создав новый проект «Single View Application». Затем добавьте deinit с println и/или точкой останова. –
Возможный дубликат [Swift: нет вывода для println в методе deinit (без использования игровой площадки)] (http://stackoverflow.com/questions/27044573/swift-no-output-for-println-in-deinit-method-not -using-playground) –