• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 重新登录 iOS 应用程序时出现内存泄漏

[复制链接]
菜鸟教程小白 发表于 2022-12-13 14:02:11 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

在我的一个应用程序中,我展示了一个登陆 View Controller ,如代码所示。这很好用,除了当我注销应用程序并重新登录时,调用相同的方法并最终创建一个新的 MyLandingController 保持旧的仍然挂起。因为,我将它分配给一个属性,它不应该自动取消分配旧的吗?我检查并确保没有其他对象保持对 MyLandingController 的强引用;虽然有弱引用。

- (void)presentMyLandingView {
    self.navigationController = nil;
    [[self.window viewWithTag:100] removeFromSuperview];
    self.window.backgroundColor = [UIColor whiteColor];
    self.primaryViewController = [[MyLandingController alloc] init];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.primaryViewController];
    [self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
    [self.window insertSubview:[self.navigationController view] atIndex:1];
    self.window.rootViewController = self.navigationController;
    [NSTimer scheduledTimerWithTimeInterval:.50 target:self selectorselector(clearSubviews) userInfo:nil repeats:NO];
}

作为一种临时解决方法,我想设置一个条件,如果我的旧 MyLandingController 存在,那么使用它而不是创建一个新的。这修复了泄漏,但整个 View 向上移动(看起来像导航栏大小向上移动)。

所以,我在这里寻找 2 个问题的答案 -

Q1) 为什么将新的 View Controller 对象重新初始化为不取消分配旧对象的属性。

Q2) 为什么重用现有对象(从弱引用中提取)不能很好地渲染 UI - 屏幕向上移动?



Best Answer-推荐答案


它泄漏是因为着陆 Controller 仍在展示堆栈中,所以它没有被释放——导航 Controller 仍然持有一个引用。

这 - 巧合 - 回答了您的两个问题,因为 View Controller 不应该在演示堆栈中出现两次。

你可以检查它是否存在,在这种情况下只是

[self.navigationController popToRootViewControllerAnimated:NO];

而不是创建另一个实例。

关于ios - 重新登录 iOS 应用程序时出现内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35081168/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap