2

我创建了一个小型测试 TabController 应用程序来测试UIWebView. 单击每个选项卡时会显示一个简单的视图控制器,该控制器会UIWebViewviewWillAppear. 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];
}
4

0 回答 0