WKWebView無法釋放控制器內存


最近做的項目有webview和js交互的,查了些資料之后,也很容易入手。但是后期優化才發現,webview的delloc方法一直就沒被調用過。意識到問題的嚴重性之后,開始了各種分析。最后定位到的問題代碼如下。

[configuration.userContentController addScriptMessageHandler:self name:@"onScan"];

 

如果使用wkwebview,添加了js的ScriptMessageHandler,那么就會出現循環引用。自己嘗試去解決這個問題。用了幾個常規方法都不起作用。

第一:

使用弱引用,通過weakself控制器,失敗。

 

第二:

通過自定義WKScriptMessageHandler代理。親測可行,但是代理類不被釋放。失敗。

第三:

  override func viewWillAppear(_ animated: Bool) {

        webView.configuration.userContentController.add(self, name: "onError")

    }

    override func viewWillDisappear(_ animated: Bool) {

        webView.configuration.userContentController.removeScriptMessageHandler(forName: "onError")

    }

成功。

注意:不要在viewWillDisappear中使用webView.configuration.userContentController.removeAllUserScripts(),這樣做同樣使得控制器不被釋放。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM