WKWebView вызывает предупреждение памяти и приложение закрывается - PullRequest
0 голосов
/ 09 июля 2019

У меня есть простое приложение с 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 при получении предупреждения о памяти, чтобы приложение не зависало?

1 Ответ

0 голосов
/ 09 июля 2019

WKWebView доступен только для iOS 11 и выше. Я протестировал ваш код с Xcode 10.2.1, и память прекрасно работает при навигации по WebView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...