无法从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:
的第二部分: toggleWebViewLoading:
中删除UIWebView
并将其设置为nil
。 此时内存消耗已降至3.38 MB
。
我的问题是,如何从UIWebView中完全回收内存(即在UIWebView
被删除并设置为nil
之后,内存消耗是否恢复到其初始值1.29 MB
或类似的东西)?
其他相关信息
在有人问为什么我非常关心~2 MB
的内存节省之前,我有更复杂的情况使用Xamarin / MonoTouch,其中10 + UIWebView
消耗200 MB+
内存,我似乎无法回收所有不再需要时的记忆。 我认为答案归结为这个简单的问题。
我建议监控你有多少线程活跃。 UIWebView为自己生成了几个线程。 一旦取消分配UIWebView,我希望它们不会被正确清理,但这只是一种预感。