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

本文记录了一次在iOS开发中遇到的奇怪问题:一个界面通过消息通知刷新数据时出现内存泄露。作者通过排除法和代码审查,最终定位到UIViewController扩展处理中的问题,涉及rootViewController切换时的内存管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说一下问题吧,今天遇到了一个奇怪的问题。一个界面通过消息通知刷新数据,断点跑了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 。
什么鬼东西,这也都可以????

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值