Ios 加载视图控制器,然后从内存中删除上一个

Ios 加载视图控制器,然后从内存中删除上一个,ios,objective-c,iphone,swift,cocoa-touch,Ios,Objective C,Iphone,Swift,Cocoa Touch,假设我有一个视图控制器a(UIViewController的子类),它有一个按钮,如果您按下按钮,它将使用segue加载和显示视图控制器B(UIViewController的子类)(因此我使用interface builder建立了连接)。Segue类型是Show 当显示B时,我将永远不会返回A,因此我想杀死、销毁、粉碎、残害它,以便宝贵的几字节内存可以用于其他事情 以下是A的代码: class ViewControllerA: UIViewController { deinit {

假设我有一个视图控制器a(UIViewController的子类),它有一个按钮,如果您按下按钮,它将使用segue加载和显示视图控制器B(UIViewController的子类)(因此我使用interface builder建立了连接)。Segue类型是Show

当显示B时,我将永远不会返回A,因此我想杀死、销毁、粉碎、残害它,以便宝贵的几字节内存可以用于其他事情

以下是A的代码:

class ViewControllerA: UIViewController {
  deinit {
    print("I am immortal haha I cannot die!!!")
    print("This will not be displayed!!!")
  }
}
以下是B的代码:

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)
  }
}
我在(1)处的代码替换了应用程序的根视图控制器。但是,旧的视图控制器似乎在内存中徘徊,因为它的deinit的打印消息没有显示


如何完成卸载不需要的视图控制器及其视图的简单任务?非常感谢当您从
ViewControllerA
中演示
ViewControllerB
时,
ViewControllerB
在其
presentingViewController
变量中对
ViewControllerA
进行了强有力的引用,因此
ViewControllerA
永远不会被取消初始化。您需要做的是直接从
ViewControllerA
更改应用程序代理窗口
rootViewController
,这意味着您必须摆脱segues