UIWebView内存占用过高、崩溃、内存溢出

2020-03-04  本文已影响0人  YY110

本文是一个webView内存管理的trick,可以直接拿来用。
由于UIWebView的内容加载不受程序员直接控制,所以在UIWebView加载一些图片较多的网页时,如果图片较多,很容易就在网页读取阶段出现 memory warning,而且当你把webview对象干掉时,内存依然不减。如果不处理的话,程序就会被kill掉。如何处理呢,下面是几个tip可以让君尝 试:

1、在每一次UIWebView读取页面结束后(Delegate),调用UserDefault关闭缓存。代码:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"]; 
} 

注意,不必担心这个WebKitCacheModelPreferen<wbr>ceKey会一直保持为0。因为每一次UIWebView加载页面的时候,都会把此值设置为1。

2、在离开webview的controller时,使用WebView加载nil的URL,并清理webview。

-(void)viewDidDisappear:(BOOL)animated { 
    [super viewDidDisappear:animated];
    [self.webView loadRequest:nil]; 
    [self.webView removeFromSuperview]; 
    self.webView = nil; self.webView.delegate = nil;
     [self.webView stopLoading];
 } 

3、在收到系统警告的时候,清理NSURLCache的CachedResponse。

-(void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning];
    [self.navigationController setNavigationBarHidden:NO]; 
} 

trick结束:)。
本文参考:
1、Reduce iOS memory utilization by taming NSURLCache
2、UIWebView Memory Leak Prevention
3、UIWebView Secrets – Part1 – Memory Leaks on Xmlhttprequest

上一篇 下一篇

猜你喜欢

热点阅读