Mặc dù có nhiều cuộc thảo luận về chủ đề này, tôi vẫn chưa tìm thấy câu trả lời.rò rỉ bộ nhớ UIWebView. Ma thuật giải phóng tài nguyên không sử dụng là gì?
Vấn đề là, sau khi UIWebView tải một trang, nó sẽ không bao giờ giải phóng tất cả các tài nguyên bộ nhớ đã sử dụng.
Tôi đã tạo một dự án trống. Chỉ cần thêm UIWebView. Bộ nhớ được sử dụng trước khi tải yêu cầu (http://methodhome.com/cleanhappy) là 4,5MB và sau khi tải xong - 70 ~ 90 MB.
Sau khi phát hành UIWebView, bộ nhớ đã sử dụng vẫn là 55MB.
Vì vậy, có vẻ như có khoảng 50MB bộ nhớ bị rò rỉ.
phương pháp tôi đã cố gắng tiếp theo:
[_webView stringByEvaluatingJavaScriptFromString:@"var body=document.getElementsByTagName('body')[0];body.style.backgroundColor=(body.style.backgroundColor=='')?'white':'';"];
[_webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML='';"];
[_webView stringByEvaluatingJavaScriptFromString:@"document.open();document.close();"];
[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
[_webView loadHTMLString:@"" baseURL:nil];
[_webView stopLoading];
_webView.delegate = nil;
[_webView removeFromSuperview];
_webView = nil;
[[NSURLCache sharedURLCache] removeAllCachedResponses];
Tôi cũng đã cố gắng thiết lập:
[[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];
và đã chơi với các thiết lập bộ nhớ cache của bộ nhớ và đĩa. Không có gì hữu ích.
Làm cách nào để có thể thực hiện được? Các trình duyệt phổ biến hoạt động như Safari và Chrome như thế nào với các rò rỉ như vậy. Bí quyết để giải phóng những tài nguyên đó là gì?
Tôi gặp khó khăn với điều này, một bài viết tuyệt vời về điều này, nó đã giúp tôi: http://www.codercowboy.com/code-uiwebview-memory-leak-prevention/ – oren
@oren Bạn không nhận thấy, rằng tôi đã sử dụng tất cả các "thủ thuật" từ bài viết này? – Nikita
Vâng xin lỗi, chỉ cần nhận thấy nó sau khi tôi nhận xét. Vì lý do nào đó, tôi nghĩ rằng có nhiều bài viết hơn. – oren