【问题标题】:Memory not being released after deleting vc with UIWebView but no leak detected by analysis tools使用 UIWebView 删除 vc 后内存未释放但分析工具未检测到泄漏
【发布时间】:2014-05-14 19:45:48
【问题描述】:

我有一个简单的应用程序,它只是加载一个包含 UIWebView 的视图控制器。在运行它时,我注意到 XCode 报告的内存量从 vc 分配前的 2 MB 增加到创建后的 12.5Mb。 但是在删除 vc 之后,内存量并没有下降,实际上它甚至进一步上升到 13Mb。但是 XCode 的泄漏分析器没有报告任何问题。

视图控制器是在应用程序的主(也是唯一的)视图控制器中创建和销毁的:

- (void) viewDidAppear:(BOOL)animated
{
    static BOOL presented = NO;
    if (!presented)
    {
        PresentationViewController *vc = [[PresentationViewController alloc] initWithPresentationId:@"index.html"];

        __weak typeof(vc) weakVc = vc;
        [vc setExitBlock:^{
            [[weakVc presentingViewController] dismissViewControllerAnimated:YES completion:nil];
        }];

        [self presentViewController:vc animated:YES completion:nil];
        presented = YES;
    }
}

视图控制器的 dealloc 被调用,所以它被销毁了,是的,Web 视图委托被取消了。

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [self.webView stopLoading];
    self.webView.delegate = nil;
}

为什么删除视图控制器时内存消耗没有下降?

【问题讨论】:

  • 您可以尝试将您的 ui 对象定义为 weak 而不是 strong
  • 你的意思是VC的UIWebView属性吗?
  • 是的,也包括其他人。
  • 如果 UIWebView 变弱,它将无法工作 - 它只是一个空白屏幕。 (而且它对内存使用也没有任何影响)

标签: ios uiwebview


【解决方案1】:
  1. 尝试重复动作 3 次甚至更多,看看内存是否仍然保持增长或保持在一个固定值附近。 iOS 有时会缓存视图以供进一步使用,即使您已将其删除。
  2. 检查您的项目方案,看看您是否设置了“启用僵尸对象”,这可能会导致内存疯狂增长。
  3. 尝试使用仪器,将Allocations Track Display Style设置为Active Allocation Dstribution,Mark Generation->加载webview->退出webview->Mark Generation->重复3次。通过这种方式,您可以找到您的内存分配中剩下的内容以及导致它的代码。

【讨论】:

  • 1) 内存不断增加 2) 不,它没有启用 3) 我去看看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 2023-01-29
  • 1970-01-01
  • 2020-08-05
相关资源
最近更新 更多