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にシームレスに切り替えることができます