我有以下示例代码(使用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}}内存,我似乎无法在不再需要时回收所有内存。我认为答案归结为这个简单的问题。
答案 0 :(得分:0)
我建议您监控有多少线程。 UIWebView为自己生成了几个线程。一旦取消分配UIWebView,我预计它们不会被正确清理,但这只是一种预感。