如何在用户注销后正确释放 ViewControllers?

How to properly release ViewControllers after user logout?

我正在尝试构建一个支持用户 login/logout 的应用程序。

当应用程序启动时,我检查用户是否已经登录,如果是,我将直接转到主应用程序,这是一个基于标签栏的视图;如果没有,我将转到登录视图,然后在用户成功登录后执行到主应用程序的 segue。这些工作正常。

问题与用户注销有关。用户登出有两种情况:

  1. 如果用户在本次使用应用程序时已经进入了登录屏幕,我可以直接执行一个unwind segue,并通过我在deinit()中添加的日志显示,主应用程序中的所有视图控制器从内存中释放。
  2. 如果用户从未进入过登录屏幕(这意味着当他们启动应用程序时他们已经登录,因此主应用程序直接显示而没有登录视图),问题来了:如果我直接执行 segue登录屏幕并且用户再次登录,将创建另一个 'new' 主应用程序。由于'old' 主应用视图没有释放,'new' 主应用视图实际上是双倍的内存。那么在这种情况下,如何在用户注销后正确释放所有现有的主要应用程序视图控制器?

从登录 window 你应该检查你是如何到达那里的。如果 login window 是层次结构的根,则显示主视图。如果用户登录然后注销,那么在下次登录时,您只需将登录 window 和 return 隐藏到已加载的主视图并根据新用户更新其内容。这种方法不会产生不必要的主视图