20

iOS5 と新しい UIViewController コンテインメント メソッドから始めて、これらのメソッドをaddChildViewController:removeFromParentViewController:、および transition メソッドと一緒に呼び出す必要があることを私は知っています。また、3 つのシナリオでそれらを呼び出す適切な順序も知っています。私が知らないのは、これらのメソッドが正確に何をするのですか?

これらが単に UIViewController のサブクラスのオーバーライド ポイントである場合、オーバーライド時にスーパーを呼び出す必要はないと思います。ビューコントローラーまたはdidMoveToParentViewController: selfを削除する前にwillMoveToParentViewController: nilを呼び出さないと、何が問題になる可能性がありますか?

4

2 に答える 2

12

言われていることに加えて、いくつかのデリゲート メソッドを呼び出します。

addChildViewController通話[child willMoveToParentViewController:self]

removeFromParentViewController:コール[child didMoveToParentViewController:nil]

また、childViewControllers子ビュー コントローラーの配列を保持するプロパティを変更します。

于 2012-10-16T08:20:25.447 に答える
1

これには多くの答えがあります:

  1. それらはそこにあり、常にパターンを維持するために、該当する場合はそれらを呼び出す必要があります。そうすれば、スーパークラスを からUIViewController独自のビュー コントローラーに変更する場合、パターン全体をどこで追跡したかを気にする必要がなくなります。

  2. それらは、全員にオーバーライドするように指示するよりも、フックするのに適した場所addChildViewController:です。あなたが言うように、特にあなたが電話するのを忘れた場合、管理ミスは管理ミスwillMoveToParentViewController:よりも危険性が低いように聞こえます。addChildViewController:super

  3. UIViewControllerおそらくあなたがそのパターンを支持しているかどうかにかかっています。受信したことを知っていても、他の 2 つのメッセージを受信しない場合、状態が矛盾していると見なす可能性addChildViewController:があります。これが簿記を行って完全なパターンを維持するように誘惑するために発生するUIViewControllerのか、それとも内部状態を本当に台無しにするのかは、楽しい推測ゲームですが、iOS のリリースで変わる可能性もあります。物がひどく壊れる可能性があります。だからこそ、あなたがこれをしている限り、私たちは何があっても物事を動かし続けるとAppleがあなたに言うために、パターンがそこにあるのです.

パターンを疑問視することは良いことですが、パターンへの適合性を根底から断ち切ろうとすることには、多くの潜在的なマイナス面があります。パターンがばかげて複雑でない限り、通常はパターンに従う方が簡単です。

于 2012-10-16T08:11:31.197 に答える