iOS UIWebViewメモリ漏洩の問題

2049 ワード

質問####


UIWebViewを使用してurlをロードすると、メモリが急増していることがわかります.最も簡単なwebViewでurlをロードするページをテストしてみると、一般的に30 M程度のメモリが増加します.
どうやってこの問題を解決しますか?ネット上で調べるときは、一般的に以下の方法があります.
    - (void)webViewDidFinishLoad:(UIWebView *)webView
    {
        [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];
        [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitDiskImageCacheEnabled"];// , 。
        [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitOfflineWebApplicationCacheEnabled"];// ,, 。
        [[NSUserDefaults standardUserDefaults] synchronize];
    }

    - (void)dealloc
    {
        [webView loadHTMLString:@"" baseURL:nil];
        [webView stopLoading];
        [webView removeFromSuperview];
        webView = nil;
        [[NSURLCache sharedURLCache] removeAllCachedResponses]; 
        [[NSURLCache sharedURLCache] setDiskCapacity:0]; 
        [[NSURLCache sharedURLCache] setMemoryCapacity:0]; 
        NSLog(@" webview");
    }
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 
          int cacheSizeMemory = 4*1024*1024; // 4MB int           

          cacheSizeDisk = 32*1024*1024; // 32MB 
          NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"];
          [NSURLCache setSharedURLCache:sharedCache]; 
    } 
    - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { 
          [[NSURLCache sharedURLCache] removeAllCachedResponses];
    } 

しかし、これらの方法は卵用ではなく、メモリはほとんどそこにあり、解放されていません.これはUIWebViewの問題で、まったく解決できないようです.

###の解決方法


iOS 8 WebKitで更新されたWKWebViewコントロールは、UIWebViewに存在するメモリ、ロード速度など多くの問題をうまく解決しています.
具体的な使用と紹介はWKWebViewの新しい特性と使用を見ることができます
WKWebViewはiOS 8以上に対応していますので、iOS 7に合わせるにはどうすればいいですか?IMYWebViewこのプロジェクトはiOS 7を簡単に実現できるときにUIWebViewにシームレスに切り替えることができます