Skip to content

0x068-警惕WkWebView中JS交互产生的内存泄露

警惕不恰当使用webView.configuration.userContentController.add 造成的内存泄漏问题。

处理方式参考:

swift
// add 
webView.configuration.userContentController.add(WeakScriptMessageDelegate(baseWebViewController: self), name: "doSomething")

// remove 
deinit {
webView.configuration.userContentController.removeScriptMessageHandler(forName: "uploadImageByBase64")
}

class WeakScriptMessageDelegate: NSObject, WKScriptMessageHandler {
    weak var baseWebViewController: BaseWebViewController?
    init(baseWebViewController: BaseWebViewController?) {
        self.baseWebViewController = baseWebViewController
    }
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if message.name == "doSomething" {
            // 
        }
    }
}
// add 
webView.configuration.userContentController.add(WeakScriptMessageDelegate(baseWebViewController: self), name: "doSomething")

// remove 
deinit {
webView.configuration.userContentController.removeScriptMessageHandler(forName: "uploadImageByBase64")
}

class WeakScriptMessageDelegate: NSObject, WKScriptMessageHandler {
    weak var baseWebViewController: BaseWebViewController?
    init(baseWebViewController: BaseWebViewController?) {
        self.baseWebViewController = baseWebViewController
    }
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if message.name == "doSomething" {
            // 
        }
    }
}