gal*_*gal 8 memory hierarchy ios swift
我的iOS应用程序存在严重问题.
我的应用程序中有登录逻辑.登录然后注销时,某些视图控制器不会破坏.这会导致一些问题,例如,我发出的一些事件会NSNotifcationCenter被发射几次.这些问题是可以避免的,但我真的想要一个解决方案,以避免一些视图控制器在后台保持打开状态而不控制它.
控制登录逻辑的方式如下:
在app delegate start函数中,如果用户已经登录,我将根视图控制器设置为主可用视图控制器.因此,我没有做任何事情,并且根视图控制器通过故事板设置为登录视图控制器导航控制器.
当用户注销时,我使用模态segue将视图控制器转换回登录视图控制器导航控制器.
你可能已经理解我正在使用故事板,swift和最新的iOS.
我的注销代码是segue,它带我到LoginViewControler:
self.performSegueWithIdentifier("Logout", sender: self)
Run Code Online (Sandbox Code Playgroud)
我的app代理代码:
if (userDefaults.valueForKey("uid") != nil) {
let tabBarView = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("TabBarViewController") as! TabBarViewController
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.window?.rootViewController = tabBarView
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我很感激帮助:)
编辑
我甚至尝试在注销操作中设置根视图控制器,这也没有帮助.怎么可能呢?
这就是我现在注销的方式:
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let newRootViewController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginNavigationController") as! UINavigationController
appDelegate.window!.rootViewController = newRootViewController
Run Code Online (Sandbox Code Playgroud)
如果登录屏幕显示登录屏幕,并且登录屏幕显示登录屏幕,那么您将有一个不断堆积新视图控制器的循环。为了解决这个问题,一个人不能呈现对方,而是放松地对待它。另一种可能性是将每个实例作为单例保存并仅呈现这些实例。