9

我的 iOS 应用程序打开时出现登录提示。用户登录后,它会切换到主视图。

在 application: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 方法,LoginViewController 似乎在该阶段被销毁,并且执行按预期继续。

我没有做任何事情来显式关闭 LoginViewController,只是假设分配一个新的 RootViewController 将意味着旧的 RootViewController 消失并被 ARC 清理掉。

我可以依靠这种情况吗?这是一个明智的做法吗?

提前致谢。

詹姆士

4

1 回答 1

11

该物业的文件rootViewController指出:

如果窗口具有现有的视图层次结构,则在安装新视图之前删除旧视图。

因此,如果您不保留自己对 的引用LoginViewController,它将被销毁。

也许这个:RootViewController Switch Transition Animation对你来说也很有趣,因为它描述了如何用动画切换根视图控制器。

于 2013-05-02T09:08:30.203 回答