3

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

- (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 读取的实时字节)。点击空白UIViewtoggleWebViewLoading:触发该函数,该函数又会创建一个新的UIWebView,加载 Google,并将其添加为子视图。完成这一系列操作后,内存使用量约为3.61 MB. 再次点击执行第二部分,从其父视图toggleWebViewLoading:中删除 并将其设置为。此时内存消耗已降至. UIWebViewnil3.38 MB

我的问题是,我怎样才能完全从 UIWebView 回收内存(即在删除并设置为后,内存消耗恢复到初始值1.29 MB或类似值)?UIWebViewnil

其他相关信息

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

4

1 回答 1

0

I would suggest monitoring how many threads you have active. UIWebView spawns several threads for itself. I expect they are not cleaned up properly once the UIWebView is deallocated, but it's just a hunch.

于 2013-10-19T04:39:07.213 回答