2016-04-14 9 views
2

ビューコントローラ(UIViewControllerのサブクラス)にボタンがあり、ボタンを押すとビューコントローラB( UIViewController)segueを使用して(私はインターフェイスビルダーを使用して接続を行ったので)。 SegueタイプはShowです。ビューコントローラをロードして、前のものをメモリから削除する

Bが表示されても、私は決してAに戻ることはありません。そのため、数千バイトの貴重なメモリを他のものに使うことができるように、殺す、破壊する、潰す、 (1)アプリケーションのルート・ビュー・コントローラを置換で

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) 
    } 
} 

マイコード:ここでBのコードである

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

:ここ

でのコードです。しかし、古いビューコントローラは、そのメモリの表示メッセージが表示されないため、メモリに残っているように見えます。

不要なビューコントローラとそのビューをアンロードする簡単なタスクをどのようにすればよいでしょうか?あなたはViewControllerAからViewControllerBを提示するとどうもありがとう

答えて

0

は、ViewControllerBのでViewControllerAがdeinitializedない飽きないThatsなぜそのpresentingViewController変数にViewControllerAの強い参照を保持します。あなたがする必要があるのは、アプリケーション代理人ウィンドウrootViewControllerを直接ViewControllerAから変更することです。これは、セグを取り除かなければならないことを意味します。

関連する問題