IOS window.rootViewController 切换原rootViewController无法释放(问题解决)

 先说一下问题吧,今天遇到了一个奇怪的问题。一个界面通过消息通知刷新数据,断点跑了2次,感觉很奇怪。通过和公司小伙伴沟通发现是由于退出登录后再登录进去后发现此问题。我首先想到的就是此功能界面没有释放,但是查看界面处理没有特殊操作。里面想到就是因为切换rootViewController的时候原rootViewController没有释放掉。查看了原 rootViewController界面A,在发现界面A并没有其他原因导致其有可能不被释放。

立即想到了自己做的UIViewController 的扩展处理中有问题,把扩展去掉后释放正常。
先附上我切换rootViewController 的代码如下(代码中忽略我的其他操作)

复制代码
+(void)setRootViewViewController:(UIViewController *)controller{
   UIWindow * window = [UIApplication sharedApplication].delegate.window;
   //清空root
   if (window.rootViewController){
       window.rootViewController = nil;
   }
   
   UINavigationController * navTabBar = [[UINavigationController alloc] initWithRootViewController:controller];
   window.rootViewController = navTabBar;
   system_titleStatusBarHeight   = [[UIApplication sharedApplication] statusBarFrame].size.height;
   system_titleViewHeight        = navTabBar.navigationBar.frame.size.height + system_titleStatusBarHeight;
   controller.automaticallyAdjustsScrollViewInsets = NO;
   if ([controller isKindOfClass:[UITabBarController class]]) {
       system_tabbarHeight = ((UITabBarController *)controller).tabBar.frame.size.height;
   }
   [JLBRouter manager].navigationVC = navTabBar;
}
复制代码

在分析扩展代码中并没有发现导致没有释放的原因是我调用了
self.navigationController.presentationController 。
什么鬼东西,这也都可以????

在这里插入图片描述
在这里做一个记录吧,希望给大家一个提示。

posted @   mingruqi  阅读(1277)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2018-07-10 APMServ5.2.6win10系统Apache、MySQL5.1启动失败解决办法
点击右上角即可分享
微信分享提示