iOSアプリケーションがログインプロンプトで開きます。ユーザーがログインすると、メインビューに切り替わります。ログイン成功後のRootViewControllerの再割り当て
アプリケーションではdidFinishLaunchingWithOptions、私はRootViewControllerをLoginViewControllerに設定しました。 LoginViewControllerはそのデリゲートとしてAppDelegateがあります
LoginViewController *login = [[LoginViewController alloc] init];
[login setDelegate:self];
[[self window] setRootViewController:login];
ログインに成功すると、LoginViewControllerはAppDelegateのuserDidLoginメソッドを呼び出します。
if([[self delegate] respondsToSelector:@selector(userDidLogin)]) {
[[self delegate] userDidLogin];
}
userDidLoginは新しいUINavigationControllerを作成し、RootViewControllerとしてそれを割り当てます。
- (void)userDidLogin
{
MainRecordViewController *mainRecordViewController = [[MainRecordViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:mainRecordViewController];
[[self window] setRootViewController:navController];
}
NSLogをLoginViewControllerのdeallocメソッドに追加すると、LoginViewControlその段階でlerが破壊され、その実行は期待通りに継続されます。
私はLoginViewControllerを明示的に閉じるために何もしていませんが、新しいRootViewControllerを割り当てることは古いものが消えてARCによって整理されるという仮定に依存しています。
私はそれが常にそうであることに頼ることができますか?これは合理的なアプローチですか?
ありがとうございます。
ジェームズ
サイドノート:ARCによって何がリリースされないのかわからない場合は、deallocメソッドを実装してNSLog(@ "MySuperDuperClassのインスタンスがARCによって割り当て解除されました")のようなものを表示できます。 – Groot
ありがとうございます - 私はすでにそれを行っています。それは私が「NSLogをdeallocメソッドに追加することによって」という意味です。ビューは正しく閉じられているように見えますが、常に割り当てが解除されているように見えますが、私はそれが常に働くことに頼ることができるのだろうかと思っていました。私はそれがうまくいると思うが、それは間違って行くかもしれないという前提のように感じる... – James