0

新しいコントローラーをnavスタックにプッシュするには、次のコードを検討してください。

   AlphaColorController * a = [[AlphaColorController alloc] initWithColor:color name:name alpha:0.25];
  [[self navigationController] pushViewController:a animated:YES];
  [a release];

のポインタはありませんa。ユーザーがこの新しいコントローラーに移動し、次に「戻る」、次に「進む」に移動した場合、navコントローラーは、このコントローラーが既に存在することを認識できるほど賢いですか、存在しない場合は、再度割り当てることができますか?コントローラーが複数回プッシュされる前にインスタンス化されているかどうかを最初に(ポインターを使用して)テストする必要がありますか?

更新:別の言い方をすれば、このコードは、ユーザーがナビゲーションコントローラーの特定の領域に移動するたびにコントローラーを効果的に再割り当てしますか?navコントローラーは毎回新しく作成されたコントローラーを再実行してプッシュしますか?

4

2 に答える 2

0

コードの動作を理解していないと思います。実際、あなたはあなたが話している新しいView Controllerオブジェクトを作成しており、実際にはそれをnavスタックにプッシュしています。そして、それへのポインターを保持しないとはどういう意味ですか? あの小さな星は何のためにそこにいるのだ!

NavigationController は、ビューがスタックからポップされるまで、ナビゲーション スタックへの参照を保持します。その場合、そのビューは割り当て解除され、破棄されます。

于 2012-05-25T04:29:40.400 に答える
0

ナビゲーション コントローラーがビュー コントローラーをプッシュすると、ビュー コントローラーのポインターがナビゲーション コントローラーのスタックに追加されます。つまりリテインカウンター+1

ナビゲーション コントローラーは、プッシュしたビュー コントローラーのすべての参照を保持します。

于 2012-05-25T04:30:36.130 に答える