У меня есть простое приложение с WKWebView. При работе на iOS 9 ожидается, что объем используемой памяти останется около 5 Мб, поскольку WKWebView работает в отдельном процессе. Но использование памяти для «других процессов» становится высоким после нескольких переходов, особенно на тяжелых страницах. Когда использование памяти достигает своего порога, приложение получает два предупреждения о памяти, а затем завершается. webViewWebContentProcessDidTerminate
никогда не вызывается.
Я пытался ответить на didReciveMemoryWarning
несколькими способами, но безуспешно. Вот что я пробовал:
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
print("**** MEMORY WARNING! ****")
URLCache.shared.removeAllCachedResponses()
URLCache.shared.diskCapacity = 0
URLCache.shared.memoryCapacity = 0
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
print("**** MEMORY WARNING! ****")
DispatchQueue.main.async {
WKWebsiteDataStore.default().fetchDataRecords(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes()) { records in
records.forEach { record in
WKWebsiteDataStore.default().removeData(ofTypes: record.dataTypes, for: [record], completionHandler: {})
print("[WebCacheCleaner] Record \(record) deleted")
}
}
}
}
Это мой код:
import UIKit
import WebKit
class MyAwsomeWebViewController: UIViewController, WKNavigationDelegate {
var page:WKWebView! = WKWebView()
@IBOutlet weak var WKBaseView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
page.navigationDelegate = self
if let url = URL(string: "https://hitta.se") {
let request = URLRequest(url: url)
page.load(request)
}
}
override func loadView() {
self.view = page
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
print("**** MEMORY WARNING! ****")
}
func webViewWebContentProcessDidTerminate(_ webView: WKWebView) {
print("*** Terminate WebView Process ***")
}
}
Как я могу очистить использование памяти WKWebViews при получении предупреждения о памяти, чтобы приложение не зависало?