我有以下示例代码(使用 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 读取的实时字节)。点击空白UIView
会toggleWebViewLoading:
触发该函数,该函数又会创建一个新的UIWebView
,加载 Google,并将其添加为子视图。完成这一系列操作后,内存使用量约为3.61 MB
. 再次点击执行第二部分,从其父视图toggleWebViewLoading:
中删除 并将其设置为。此时内存消耗已降至. UIWebView
nil
3.38 MB
我的问题是,我怎样才能完全从 UIWebView 回收内存(即在删除并设置为后,内存消耗恢复到初始值1.29 MB
或类似值)?UIWebView
nil
其他相关信息
在有人问我为什么这么关心~2 MB
内存节省之前,我有更复杂的情况使用 Xamarin/MonoTouch,其中 10+UIWebView
正在消耗200 MB+
内存,我似乎永远无法回收所有内存更需要。我认为答案归结为这个简单的问题。