2016-04-14 3 views
2

Nehmen wir an, ich habe einen View-Controller A (Unterklasse von UIViewController), der eine Schaltfläche hat, und wenn Sie die Schaltfläche drücken, lädt und anzuzeigen View-Controller B (Unterklasse von UIViewController) über ein Segment (also habe ich die Verbindung mit dem Interface Builder hergestellt). Segue-Typ ist Zeigen.Laden Sie einen View-Controller und entfernen Sie dann den vorherigen aus dem Speicher

Wenn B angezeigt wird, werde ich nie wieder zu A zurückkehren, also möchte ich töten, zerstören, zerquetschen, verstümmeln, so dass die wertvollen paar Bytes Speicher für andere Dinge verwendet werden können. Hier

ist der Code für A:

class ViewControllerA: UIViewController { 
    deinit { 
    print("I am immortal haha I cannot die!!!") 
    print("This will not be displayed!!!") 
    } 
} 

Hier ist der Code für B ist:

class ViewControllerB: UIViewController { 
    override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    print("Go away old view controller!!!") 
    appDelegate.window!.rootViewController = self // (1) 
    } 
} 

Mein Code bei (1) ersetzt, um die Wurzel-View-Controller des App. Der alte Ansicht-Controller scheint jedoch im Speicher zu verweilen, da die Drucknachricht seines Inhalts nicht angezeigt wird.

Wie kann ich die einfache Aufgabe des Entladens eines nicht benötigten View-Controllers und seiner Ansicht durchführen? Vielen Dank

Antwort

0

Wenn Sie ViewControllerB von ViewControllerA präsentieren, ViewControllerB eine starke Referenz von ViewControllerA in seiner presentingViewController Variable so thats halten, warum ViewControllerA nie deinitialisiert bekommen. Was Sie tun müssen, ist App-Delegierten Fenster rootViewController direkt von ViewControllerA zu ändern, was bedeutet, dass Sie segues loswerden müssen.

Verwandte Themen