0

親コントローラーが1つ、ビューコントローラーが1つあります。iPhoneSDKが提供するContainmentAPIを活用するためのaddChildViewControllerand関数を正常に実行しました。transitionFromViewControllerしかし、実際にView Controllerをこれらの関数に渡す前に、いくつか質問があります。

質問1:ParentVCViewDidLoadメソッドでは、次を使用して4つの子ビューコントローラーすべてをインスタンス化する必要があります

UIViewController* child = [self.storyboard instantiateViewControllerWithIdentifier:identifier];

また self.myViewController = [[MyViewController alloc] init];

質問2:最初に4つの子ビューすべてをインスタンス化しないと仮定すると...を使用して遷移を実行する前に、をViewDidLoad使用して新しい子を追加するたびに、追加したい子VCをインスタンス化する必要がありますか?addChildViewControllertransitionFromViewController

質問3:質問1および/または質問2の回答が「はい」であるという条件の下で、メモリ管理について何をしなければならないか。質問1の場合、子VCから親VCに戻ると、4つの子ビューコントローラーの新しいオブジェクトが作成されることを意味しているようですが、正しいですか?質問2を見ると、トランジションが行われることがよくありますが、そのたびに子ViewControllerオブジェクトの新しいコピーが作成されるようです。本質的に、このアプリは、親と子の間、および子と子のビューの間でいくつかの遷移が発生した後、非常に肥大化する可能性があります。

質問4transitionFromViewController呼び出されたとき、記憶の中で何が起こっているのですか?親子遷移で親VCはどうなりますか?子-子遷移で子VCはどうなりますか?

更新:この特定のチュートリアルからの次の引用は、私の懸念のいくつかを参照しているようです(強調が追加されました):

呼び出しself.storyboardから設定されていないことに注意してください。init現時点では、この初期化コードを配置するのに最適な場所はありません。1つのオプションはオーバーライドすることsetStoryboard:で、もう1つは。ですviewDidLoad。両方のオプションの問題は、 ViewControllerが2回インスタンス化されないように呼び出しを保護する必要があることです。addChildViewController:

4

1 に答える 1

1
  1. いいえ、必要がなければ、カスタムコンテナビューコントローラのすべての子をインスタンス化する必要はありviewDidLoadません。必要に応じてできますが、そうする必要はありません。必要に応じて、ジャストインタイムの方法でそれらをインスタンス化できます。

  2. 前にインスタンス化する必要があるだけでなくtransitionFromViewController、明らかに前addChildControllerにもインスタンス化する必要があります。

  3. すべてのビューコントローラを事前にインスタンス化することを選択した場合、個々のコントローラによって作成されるメンバーオブジェクトは、それらのコントローラでの処理方法の関数であるため、抽象的に答えることはできません。しかし、潜在的なすべての子を一度にインスタンス化する必要がないことがわかっているので、これは学術的なことかもしれません。

  4. transitionFromViewControllerコントローラによって消費されるメモリには影響しません。と組み合わせて実行する可能性のある、コントローラーのインスタンス化(およびコントローラーへの追加addChildViewController)とそれに続く(コントローラーへの最後の強力な参照であると想定)を制御するもの。removeFromParentViewControllertransitionFromViewController

于 2013-01-11T20:30:40.287 に答える