3

ARC + ストーリーボードを使用しています。

私はセグエや UINavigationController を使用していませんが、個々のビューを次のように表示しています。

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
SecondViewController *secondViewController = [storyBoard instantiateViewControllerWithIdentifier:@"SecondVC"];

[self presentViewController:secondViewController animated:YES completion:nil];

したがって、私のアプリの典型的な流れは次のとおりです。

MainViewController presentViewController: SecondViewController presentViewController: ThirdViewController ...etc

先に進んだ後、私が提示した以前のView Controllerがメモリにぶら下がっているのはもう必要ありません。

ここで、2 番目のビュー コントローラーに移った後、MainViewController のタイマー関数にブレーク ポイントを設定し、すべてがまだそこにあることを確認します。

4

3 に答える 3

0

:viewcontrollerはいつですautomatically retainedpresentViewController:、ARCでは保持されたオブジェクトを処理し、適切なときに解放します。

dismissModalViewController後で呼び出しますrelease the retained controller automatically

于 2012-10-26T04:41:10.627 に答える
0

これが役立つかもしれません。

[viewController.view removeFromSuperview];

ここで見つけました:ビューを閉じるにはどうすればよいですか?

于 2014-11-08T09:30:23.267 に答える
0

正しく読んでいないのは私だけですか?提示されたView ControllerとPresenting View Controllerについて誤解があるようですか?

MainViewController が一番上にあり、次のように呼び出す [mainViewController presentViewController:secondVC animated:YES completion:nil];と、secondVC が提示されたコントローラーになり、mainViewController がその提示ビューコントローラーになります。


とは言っても、表示中のビュー コントローラーをメモリからアンロードしたいようですね。

「今、2 番目のビュー コントローラーに移った後、MainViewController のタイマー関数にブレーク ポイントを設定し、すべてがまだそこにあることを確認できます。」

もしそうなら、これは、このように提示されたときのView Controllerの振る舞いとは正確には異なります。はpresentingViewControllerメモリ警告通知を受信するまでメモリ内にあり、最上位にない場合はビューのみをアンロードします。(コントローラ オブジェクト自体はまだ生きています)。

コントローラー間の親子関係が壊れてしまうため、単純に提示側のコントローラーを解放することはお勧めできません。これは手動で修正できますが、場合によっては少し面倒な場合があります。あなたが何をしているのかを知っているなら、お勧めします。

presentingViewController を本当に強制終了したい場合は、追加のカスタム コンテナー ビュー コントローラーを作成して、ビュー コントローラーを提示し、前のコントローラーを解放することをお勧めします。ビューコントローラーは高価ではありません。そのビューはそれが何であるかです:)

ナビゲーション コントローラーを使用する場合でも、そのビューのロード/アンロードに関する動作は似ていることに注意してください。ナビゲーション コントローラーはすべてのビュー コントローラーを保持するため、ビューのみがアンロードされます。

于 2012-10-26T04:53:53.997 に答える