2017-07-05 28 views
0

私は3つのViewControllerを持っています。 最初のViewControllerは、ユーザーがログインしているかどうかを確認しています。 yesの場合、mainVCにperformSegueを、loginVCにperformSegueがない場合は、未使用のViewControllerをメモリから削除します

私はloginVCにログインすると、mainVCにログインして実行します。

今私が望むのは、メモリを節約するために、未使用のViewControllerをすべて「削除」したいと考えています。 どうしたらうまくいくのですか?

私はここにStackOverflowのコードのこの部分を見つけた:

class ManualSegue: UIStoryboardSegue { 

    override func perform() { 
    sourceViewController.presentViewController(destinationViewController, animated: true) { 
     self.sourceViewController.navigationController?.popToRootViewControllerAnimated(false) 
     UIApplication.sharedApplication().delegate?.window??.rootViewController = self.destinationViewController 
    } 
    } 
} 

は、私が欲しいものをやろうとしていることですか?このメソッドは、ViewControllerをポップしているので、はいのようです。

私は「詳細を表示」を使用しています - このメソッドを使用する場合を除いて、カスタムSegue Segueを作成しました。

+0

「スウィフトは、アプリケーションのメモリ使用量を追跡し、管理するために、自動参照カウント(ARC)を使用しています。ほとんどの場合、これはSwiftのメモリ管理が「ちょうどうまくいく」ことを意味し、自分でメモリ管理について考える必要はありません。 ARCは自動的にクラスインスタンスが使用するメモリを自動的に解放します。」Apple Inc.「Swift 3.0.1」の抜粋:Apple Inc.、2016-10-21T07:00: 00Z。 iBooks。この資料は著作権によって保護されている場合があります。 iBooks Storeでこの本をチェックしてください:https://itun.es/us/jEUH0.l – Mannopson

答えて

0

削除はAppleによって処理される必要があります。削除サイクルは作成しない限り、理論的には心配する必要はありません。原則として、ブロック内のselfへの強い参照はありません。面白いことに、上記のコードは、ViewControllerを却下して(したがってそれを削除する)、保持サイクルもあります。 [weak self]strongSelf必要に応じてキャストを追加する手助けする必要があります

override func perform() { 
    sourceViewController.presentViewController(destinationViewController, animated: true) { [weak self] in 
     guard let strongSelf = self else { return } 
     strongSelf.sourceViewController.navigationController?.popToRootViewControllerAnimated(false) 
     UIApplication.sharedApplication().delegate?.window??.rootViewController = strongSelf.destinationViewController 
    } 
} 
0

メモリーの質問

はい、それはそれがどのように動作するかです。 View Controllerを解放する必要はありません。

システムは、View Controllerオブジェクトへの参照を追跡します。これらの参照がもうない場合は、メモリの割り当てが解除されます。あなたは、より迅速な言語のドキュメントにこれについて読むことができます:

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html

コードが

presentViewController方法は、モーダルビューコントローラを示している何をしていますか。新しいView Controllerが表示された後に完了クロージャが実行されます。内側に近い2つのものが発生する

  1. popToRootViewControllersourceViewControllerオブジェクト内のすべてのビューコントローラを削除します。
  2. rootViewControllerは、新しい値に設定されます。

これは実際にはルートビューコントローラを別のものに変更します。これはログインに成功した後の有効なアクションのようです。

手順1が必要かどうかわかりません。そのナビゲーションビューコントローラは、とにかくそこにView Controllerをポップする理由がなくなるでしょうか?ビューコントローラ

について

より多くのあなたは、ビューコントローラのライフサイクルに興味があるかもしれません。 UIKit開発者向けドキュメントは、ビューコントローラについての詳細な内容が含まれています

https://developer.apple.com/documentation/uikit/uiviewcontroller

関連する問題