我创建了一个小型测试 TabController 应用程序来测试UIWebView
. 单击每个选项卡时会显示一个简单的视图控制器,该控制器会UIWebView
在viewWillAppear
. Webview 加载一个本地测试 html 文件,该文件显示 1000 张图像。
在 上viewWillDisappear
,我通过从超级视图中删除 WebView 来解除分配 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];
}