使用UIWebView删除vc后,内存未被释放,但分析工具未检测到泄漏

时间:2014-05-14 19:45:49

标签: ios uiwebview

我有一个简单的应用程序,它只是加载一个包含UIWebView的视图控制器。在运行它时,我注意到XCode报告的内存量从vc分配之后的2 MB增加到创建后的12.5 MB。 但是在删除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;
}

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

1 个答案:

答案 0 :(得分:2)

  1. 尝试重复动作超过3次甚至更多次,查看内存是否仍在保持增长或保持接近固定值。 iOS有时会缓存视图以供进一步使用,即使您将其删除也是如此。
  2. 检查您的项目Scheme是否已设置"启用Zombie Objects"这可能会导致内存疯狂增长。
  3. 尝试使用intrumemnts,将Allocations Track Display Style设置为Active Allocation Dstribution,Mark Generation->加载webveiew->退出webview-> Mark Generation->重复3次。通过这种方式,您可以找到记忆分配中的内容以及导致它的代码。