【问题标题】:Memory leak when using MBProgressHUD使用 MBProgressHUD 时的内存泄漏
【发布时间】:2014-03-26 10:46:12
【问题描述】:

我使用MBProgressHUB 作为加载指示符。我通过 Instruments 注意到,使用 MBProgressHUB 每次启动大约 3MB。问题是,当视图卸载时内存不清除 时存在相当大的内存泄漏。

项目已启用 ARC

这就是我在ViewDidLoad 中启动MBProgressHUB 的方式(HUD 也是保留属性)

HUD = [[MBProgressHUD alloc] initWithView:[(AppDelegate *)[[UIApplication sharedApplication]     delegate] window]];
[[(AppDelegate *)[[UIApplication sharedApplication] delegate] window] addSubview:HUD];
HUD.delegate = self;

也在ViewDidUnload我设置HUD = nil;

有什么想法吗???

【问题讨论】:

  • Instruments 还会向您显示分配的位置...尽可能制作最小的示例程序,但仍会显示泄漏,并且搜索的噪音会更少。

标签: ios iphone objective-c memory-leaks mbprogresshud


【解决方案1】:

您正在将您的 hud 作为子视图添加到窗口中。 Window 在您的应用程序运行时始终将其保存在子视图中。

您应该在不需要时调用 [HUD removeFromSuperview] 方法,或将属性 HUD.removeFromSuperViewOnHide 设置为 YES - 这样它会在隐藏时自行移除,如果您没有将其保留在其他地方,它会释放内存。

如果您将其添加到控制器的视图中 - 它将在控制器生命周期结束时与其视图一起被释放。

【讨论】:

  • HUD.removeFromSuperViewOnHide = YES 正是我所缺少的!谢谢 SerJ_G!
【解决方案2】:

我设法通过在 AppDelegate 中仅初始化一次 MBProgressHUB 来解决该问题。并且仅在其他地方使用对它的引用

【讨论】:

    【解决方案3】:

    我正在使用非 ARC 项目进行此操作。

    我找到了一个只需更改- (id)initWithView:(UIView *)view { 方法的解决方案。它返回me,我将其更改为返回[me autorelease]

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-06
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多