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

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

  源代码中是这样写的:

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 ;

问题解决!

希望对你们有所帮助!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,542评论 1 14
  • 1.自定义控件 a.继承某个控件 b.重写initWithFrame方法可以设置一些它的属性 c.在layouts...
    圍繞的城阅读 3,469评论 2 4
  • 一个app往往有很多界面,而界面之间的跳转也就是对应控制器的跳转,控制器的跳转一般有两种情况 push 或者 mo...
    Dariel阅读 15,465评论 73 186
  • “简易音标”最先由肖家旗发明的,肖先生已经90岁了,上海人,他在1999年的时候写了一本书《英语简易注音法》 ,他...
    詹小虫阅读 4,607评论 1 9
  • 今天我再次买药,希望自己健康,以前觉得自己离药遥远,尤其中药,偏偏我这么年轻就开始把很多钱花在不健康的身体上,我以...
    64f8e520b49a阅读 215评论 0 2