无法从UIWebView完全回收内存使用情况

时间:2013-10-17 19:45:34

标签: ios objective-c memory-management uiwebview

我有以下示例代码(使用ARC),它将UIWebView添加为子视图,然后将其删除(通过屏幕上的点按手势切换):

- (void)toggleWebViewLoading:(UITapGestureRecognizer *)sender
{
    if (webView == nil)
    {
        webView = [[UIWebView alloc] initWithFrame:CGRectMake(0.0f, 100.0f, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 100.0f)];
        [webView loadRequest:[[NSURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:@"http://www.google.ca"]]];
        [self.view addSubview:webView];
    }
    else
    {
        [webView removeFromSuperview];
        webView = nil;
    }
}

当应用最初使用空白UIView加载时,它消耗大约1.29 MB(从Instruments.app读取的实时字节数)。点击空白UIView会导致toggleWebViewLoading:功能触发,然后创建新的UIWebView,加载Google,并将其添加为子视图。完成此操作序列后,内存使用量约为3.61 MB。点击再次执行toggleWebViewLoading:的第二部分,从其超级视图中删除UIWebView并将其设置为nil。此时内存消耗已降至3.38 MB

我的问题是,如何从UIWebView中完全回收内存(即,在1.29 MB被删除并设置为UIWebView后,内存消耗将返回其初始值nil或类似内容~2 MB)?

其他相关信息

在有人问为什么我非常关心UIWebView内存节省之前,我有更复杂的情况使用Xamarin / MonoTouch,其中10 + 200 MB+消耗{{1}}内存,我似乎无法在不再需要时回收所有内存。我认为答案归结为这个简单的问题。

1 个答案:

答案 0 :(得分:0)

我建议您监控有多少线程。 UIWebView为自己生成了几个线程。一旦取消分配UIWebView,我预计它们不会被正确清理,但这只是一种预感。