【发布时间】:2017-05-10 16:31:48
【问题描述】:
我有一个 UIWebView,我必须在里面加载一个 url。
问题是打开webView后发生内存泄漏。 我的意思是我无法消除内存泄漏。
下面是我的代码:-
import UIKit
import Toast_Swift
class WebViewController: UIViewController,UIWebViewDelegate {
//WebView
@IBOutlet weak var webView: UIWebView!
//URL
var strUrl : String? = nil
//Tag
var tag : Int! = 0
//ViewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
//Delegate of web view
webView.delegate = self
//webView.stringByEvaluatingJavaScript(from: "localStorage.clear();")
self.webView.loadRequest(URLRequest(url: URL(string: self.strUrl!)!))
//Loading View
self.view.makeToastActivity(.center)
}
//MARK :- Web view delegate.
func webViewDidFinishLoad(_ webView: UIWebView) {
//ToastManager.shared.tapToDismissEnabled = true
self.view.hideToastActivity()
}
//Button Back Action
@IBAction func btnBack(_ sender: Any) {
if (tag == 1) {
webView.delegate = nil
self.strUrl = ""
webView.removeCache()
let gotoCreateView = self.storyboard?.instantiateViewController(withIdentifier: "CreateAccountView") as! CreateAccountView
self.present(gotoCreateView, animated: true, completion: nil)
} else {
webView.delegate = nil
self.strUrl = ""
webView.removeCache()
let gotoAboutUsView = self.storyboard?.instantiateViewController(withIdentifier: "AboutUsView") as! AboutUsView
self.present(gotoAboutUsView, animated: true, completion: nil)
}
/*if (1 == tag)
{
webView.delegate = nil
webView.removeCache()
let gotoCreateView = self.storyboard?.instantiateViewController(withIdentifier: "CreateAccountView") as! CreateAccountView
self.present(gotoCreateView, animated: true, completion: nil)
}
else
{
webView.delegate = nil
webView.removeCache()
let gotoAboutUsView = self.storyboard?.instantiateViewController(withIdentifier: "AboutUsView") as! AboutUsView
self.present(gotoAboutUsView, animated: true, completion: nil)
}*/
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
webView.delegate = nil
webView.removeCache()
webView.delegate = self
self.webView.reload()
}
}
extension UIWebView
{
func removeCache()
{
URLCache.shared.removeAllCachedResponses()
URLCache.shared.diskCapacity = 0
URLCache.shared.memoryCapacity = 0
if let cookies = HTTPCookieStorage.shared.cookies {
for cookie in cookies {
HTTPCookieStorage.shared.deleteCookie(cookie)
}
}
}
}
如何消除内存泄漏?
谢谢
【问题讨论】:
-
如果您的目标是 ios 8.0 或更高版本,请选择 WKWebView。它比 UIWebView 有更好的内存管理。
-
是的,但在storyBoard UIWebView 可用?谢谢
-
您可以根据需要以编程方式添加。最后记忆很重要!
-
我该怎么办?还有在哪里加载?谢谢
-
创建示例项目以测试两者并检查内存消耗的差异。过去我会遇到 UIWebView 问题,切换到 WKWebView 解决了所有与内存相关的问题。 See this for migrating to WKWebView
标签: ios swift http memory-leaks uiwebview