在我的应用中,按钮会将(带有网址链接)分段到包含UIViewController
的新webView
。这很好用。但问题是,一旦用户开始点击webView
内的多个链接,内存使用量开始增加,并且继续增长,它会达到超过300mb且我的应用程序崩溃的程度。
我想知道如何处理这个问题?有没有更好的方法来处理webView中的内存问题?或者有没有办法在safari浏览器中打开链接,并在顶部有一个小的返回按钮,可以回到我的应用程序?这会解决我的应用程序的内存问题吗?如果是,我该如何编码?
目前我在UIViewController
内使用包含webView
的标准代码,如下所示:
var productUrl: String? // Received from previous ViewController segue
Override func viewDidLoad() {
// Enable zoomIn/Out option for users
webView.scalesPageToFit = true
webView.delegate = self
// Validate URL
NSURL.validateUrl(productUrl!, completion: { (success, urlString, error) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if (success) {
print("Success")
self.url = NSURL (string: urlString!)
let requestObj = NSURLRequest(URL: self.url!);
self.webView.loadRequest(requestObj);
}
else {
print("Fail")
}
})
})
}
func webViewDidStartLoad(webView: UIWebView) {
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
activityIndicator.startAnimating()
funcToCallWhenStartLoadingYourWebview()
}
func webViewDidFinishLoad(webView: UIWebView) {
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
activityIndicator.stopAnimating()
funcToCallCalledWhenUIWebViewFinishesLoading()
}
答案 0 :(得分:1)
很少有教程可以帮助您解决这个问题。尝试在appcoda
上查看来自Joyce Echessa的非常好的WebKit教程。这将帮助您解决问题。
您在Joyce Echessa的教程中必须处理的另一件事是,当您从webKit视图切换回其他视图时,您将收到崩溃,因为教程不包括删除已注册观察者的方法。但是这可以通过使用下面的代码解决(删除“loading”和“estimatedProgress”键路径。我不在这里描述,因为对于可能在其上努力工作的Joyce Echessa来说这是不公平的。所以你会一旦你看到教程,就会有更好的想法,因为它有详细记录。
测试完教程并遇到崩溃后,请尝试使用以下代码删除viewDidDissapear块中创建的观察者。
override func viewWillDisappear(animated: Bool) {
if (webView.loading) {
webView.stopLoading()
}
progressView.setProgress(0.0, animated: false)
webView.removeObserver(self, forKeyPath: "estimatedProgress")
webView.removeObserver(self, forKeyPath: "loading")
webView.navigationDelegate = nil
webView.UIDelegate = nil
}