Ich habe eine UIView, die zu einem UIViewController hinzugefügt wird, und teste generell die Deinitialisierung, um sicherzustellen, dass ich die Dinge richtig mache. Aber wenn ich die Variable in meinem viewController nicht auf nil setze und nur .removeFromSuperView() verwende, wird die deinit() -Methode in UIView erst aufgerufen, wenn ich die UIView zu einem anderen Zeitpunkt als ihrem aufgerufenen Objekt hinzufüge. Aber wenn ich removeFromSuperView() verwende und die Variable auf nil setze, wird deinit() sofort aufgerufen. Warum das?Warum wird Deinit erst aufgerufen, wenn UIView wieder zum übergeordneten Objekt hinzugefügt wird?
Hier UIView() Klasse:
class TestView: UIView {
override init(frame: CGRect) {
super.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
print("init is happneing")
}
deinit {
print("de init is happneing")
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Hier ist der Mutterviewcontroller:
class MyViewController: UIViewController {
var tstview : TestView?
//adding the UIView by tapping on a button
@IBAction func addView(_ sender: UIButton) {
let test = TestView()
tstview = test
tstview?.frame = CGRect(x: 50, y: 60, width: self.view.frame.width-100, height: self.view.frame.height-200)
tstview?.backgroundColor = UIColor.white
self.view.addSubview(tstview!)
}
override func viewDidLoad() {
super.viewDidLoad()
}
//removing UIView by touching elsewhere
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
tstview?.removeFromSuperview()
// tstview = nil
}
}
Vielen Dank für die Antwort, ich möchte sicherstellen, dass ich kein Leck, das in diesem Fall, wie ich verstehe, wirdMove toSuperview wird nicht helfen. Ich versuche zu verstehen, warum removeFromSuperview() nicht deininiert, bis ich eine andere Instanz der UIView() zu meinem übergeordneten Controller hinzufügen, denn dann und nur dann sehe ich deninit aufgerufen wird. Ich habe mir die Dokumente angeschaut, kann aber den Grund nicht finden. – TheeBen
@TheeBen Bitte überprüfen Sie den aktualisierten ersten Absatz. – kennytm
Schön! jetzt habe ich es verstanden! Ich werde so schnell wie möglich akzeptieren – TheeBen