【问题标题】:How to properly release ViewControllers after user logout?用户注销后如何正确释放 ViewController?
【发布时间】:2015-04-08 10:23:36
【问题描述】:

我正在尝试构建一个支持用户登录/注销的应用程序。

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

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

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

【问题讨论】:

  • 你怎么知道你要去“新”的主应用程序视图?而且,内存实际上是如何翻倍的?你为什么不从登录屏幕回到原来的主屏幕?你真的把它放在仪器下,观察你的内存使用情况,看看它是从哪里来的,还是你在猜测?
  • 是的。我一直在监控内存使用情况,每当我从登录屏幕再次登录时,似乎再次创建了主应用程序视图,并且随着我不断注销和登录,我可以看到内存使用量在增加

标签: ios swift memory


【解决方案1】:

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

【讨论】:

  • 谢谢!这似乎是个好主意。我不确定我应该怎么做。我会开始试一试。
  • @JayWang 你可以检查presentingViewController 属性以确定是否有一些视图控制器显示了你的登录视图控制器
猜你喜欢
  • 1970-01-01
  • 2015-12-28
  • 2012-09-13
  • 1970-01-01
  • 2019-05-04
  • 2019-01-19
  • 2017-05-29
  • 2020-09-20
  • 1970-01-01
相关资源
最近更新 更多