我创建了一个小测试TabController应用来测试UIWebView
的内存使用情况。点击每个标签会显示一个简单的视图控制器,它会在UIWebView
的主视图中添加viewWillAppear
。 Webview加载本地测试html文件,该文件显示1000个图像。
在viewWillDisappear
上,我通过从超级视图中删除它来取消分配WebView,因为我不想在内存中有多个实例。在我释放WebView之前,我还在HTML实现中调用一个方法来销毁浏览器窗口对象中包含的任何对象。
我注意到的是,当我第一次初始化UIWebView
时,它会分配大约600KB的内存。当我通过切换标签取消分配WebView时,我没有得到那个记忆。
在切换选项卡后分配和初始化下一个WebView时,仅分配大约20 KB的内存。当我点击下一个标签时,当前的webview被取消分配,我得到了大部分的20KB。
只是操作系统在呈现UIWebView
时需要依赖它所需的依赖库吗?
以下是我的viewWillAppear
/ viewWillDisappear
方法:
- (void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
webView = [[UIWebView alloc] initWithFrame:[self view].frame];
webView.delegate = self;
[[self view] addSubview:webView];
NSString *fileStr = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"html" inDirectory:@""];
NSMutableString* template = [NSMutableString stringWithContentsOfURL:[NSURL fileURLWithPath:fileStr] encoding:NSUTF8StringEncoding error:NULL];
NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
NSData* d = [template dataUsingEncoding:NSUTF8StringEncoding];
[webView loadData:d MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:baseURL];
[webView release];
}
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
webView.delegate = nil;
[webView stopLoading];
[webView stringByEvaluatingJavaScriptFromString:@"destroy();"];
[webView removeFromSuperview];
}