UIWebView memory management

后端 未结 4 966
轮回少年
轮回少年 2020-12-15 19:19

I have a problem with memory management.

I am developing an application that makes heavy use of UIWebView. This app generates dynamically lots of UIWebViews while lo

相关标签:
4条回答
  • 2020-12-15 19:51

    This isn't a solution, but a possible explanation of the issues you're facing.

    I had memory problems with an app I worked on. It consisted of (in effect) a scroll view, containing 3 full screen sized web views. Each webview's content size was multiple screens, say 10 on average.

    When you load a webview, the whole view is rendered in memory. SO, aside from the memory used to load the images and other data (the stuff you see in the Allocations instrument), the web view itself uses memory when it's rendered that you have no control over.

    So, for example, a 768x1024 webview, with 10 pages of content would use

    768 * 1024 * 10 (pages) * 4 (bits per pixel) = 31,457,280 = 30MB.

    Multiply by 3 web views, and that's 90MB used on top of memory that the app allocated directly.

    You can get a feel for how much memory is being used like this in Instruments, using the VM Tracker instrument.

    0 讨论(0)
  • 2020-12-15 19:54

    Write this in your viewWillDisappear method:

    [WebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
    
    0 讨论(0)
  • 2020-12-15 19:54

    If you add multiple subviews within the same instance of a viewcontroller, you must remove the old subview from the superview before you add a new subview.

    Add a tag to the UIWebView before you add it as a subview:

    webView.tag  = 10;
    [self.view addSubview:webView];
    
    webView = nil;
    

    Before you add the new webview(this will clear the old view), remove the subview from the superview:

    UIWebView * oldWebView = (UIWebView *)[self.view viewWithTag:10];
    [oldWebView removeFromSuperview];
    

    If you don´t remove the old webviews from the superview, they will build up in memory until you release the viewcontroller.

    0 讨论(0)
  • 2020-12-15 19:57

    Try adding

    [webView loadHTMLString: @"" baseURL: nil];
    

    right before you release the webview. For a leak in 4.2.1 relating to displaying a PDF in a UIWebView this solves most of the leak problems for me.

    0 讨论(0)
提交回复
热议问题