开发杂谈面试UI基础

iOS 跟换根控制器,之前的控制器得不到释放的问题

2016-12-13  本文已影响730人  djing

      最近发现写的项目中有个严重的问题,就是切换根控制器后,发现之前的根控制器还在,并没有被销毁!

  源代码中是这样写的:

LoginVC * vc = [[LoginVC alloc]init];

UINavigationController * nav = [[UINavigationController alloc]initWithRootViewController:vc];

APP_WINDOW.rootViewController = nav ;

直接切换了根控制器,然后打开视图调试,发现之前的视图还在下面

百度很久没找到解决方法,现在在http://stackoverflow.com/questions/17632024/changing-the-rootviewcontroller-of-a-uiwindow

这个衔接上找到了解决方法:

1.以前的根控制器有循环引用,所以释放不了

2.切换根控制器的时候,要把window下的subviews删掉!

我现在把代码改成这样就好了:

LoginVC * vc = [[LoginVC alloc]init];

UINavigationController * nav = [[UINavigationController alloc]initWithRootViewController:vc];

for (UIView *v in APP_WINDOW.subviews) {

[v removeFromSuperview];

}

APP_WINDOW.rootViewController = nav ;

问题解决!

希望对你们有所帮助!

上一篇 下一篇

猜你喜欢

热点阅读