-1

ユーザーの選択に基づくホームViewControllerでは、選択したViewControllerをロードする必要があります。このために、AppDelegate.window.rootViewController を、選択したビュー コントローラーで開始されたナビゲーション コントローラーに変更しています。

元:

navigationController = [[UINavigationController alloc] initWithViewController:selectedViewController];
[UIApplication delegate].window.rootviewcontroller = navigationController;

これはすべて正常に機能していますが、ここでの私の質問は次のとおりです。

navigationController = [[UINavigationController alloc] initWithViewController:homeViewController];
[UIApplication delegate].window.rootviewcontroller = navigationController;

これにより、以前のナビゲーション コントローラーのナビゲーション スタックがクリアされますか? または、アレイを外部からクリアする必要がありますか? ナビゲーション コントローラーを appdelegate のウィンドウ rootviewcontroller に割り当てるとどうなるか説明してください。

私のアプリケーションは 6.0 バージョンであることに注意してください。

4

2 に答える 2

1

ナビゲーション スタックは、ナビゲーション コントローラーによって維持されます。したがって、新しいナビゲーション コントローラーを作成すると、そのスタックは明らかに空になります。RootViewController プロパティは、アプリケーションの現在のウィンドウで誰がメインの viewController であるかを定義します。そのため、rootviewcontroller を置き換えると、新しいコントローラーがこのウィンドウのメインとして表示されます。

于 2013-06-14T10:44:28.680 に答える
1

コードを見ずに、コードにメモリ リークがあるかどうかを保証することはできません。一般に、ナビゲーション コントローラーが破棄されると、スタック上のビュー コントローラーが解放されます。ただし、View Controller がコード内に保持される場合があります。これは、View Controller が解放されず、アクティブなままになり、メモリ リークが発生することを意味します。

あなたの場合、アプリをプロファイリングすることを強くお勧めします。Allocations/Leaks などのXCode インストゥルメントを使用します。View Controller/Navigation Controller インスタンスをチェックして、メモリが解放されるべきときに解放されているかどうかを確認します。メモリ リークが発生している場合は、コード内のどこでコントローラーが保持されているかを調べます。

これは、コード内のメモリ リークを見つける方法に関するRaywenderlich のサイトからの優れたチュートリアルです。

于 2013-06-14T11:11:03.540 に答える