WkWebView 实例和内存泄漏

WkWebView instances and memory leak

我想知道是否有一种方法可以减少或重用 wkwebview 的实例,因为每次在 wkwebview 上实现一个方法

wkWebView.load(myRequest)

生成了一个 web 实例并保留在内存中,我可以在使用 Safari 进行调试时看到它们:

每次显示同一个页面,内存消耗增加:

加载"about: blank"没有解决问题,还有wkWebView = nil.

经过一番研究,我发现了我的错误:

let webConfig = WKWebViewConfiguration()
let userController:WKUserContentController = WKUserContentController()
userController.add(self, name: "interOp")

在 viewDidLoad 中导致内存泄漏,因为 userController 从未被释放(对于 wkwebview 也是如此)。

我的解决方案是:在包含 wkWebView:

的 viewController 的 class 中声明 WKUserContentController
var userController: WKUserContentController  = WKUserContentController()

在 viewDidLoad 中引用它:

userController.add(self, name: "interOp")
webConfig.userContentController = userController;

并在 viewWillDisappear 中释放它:

userController.removeScriptMessageHandler(forName: "interOp")

也许这不是解决此问题的更好方法,但它确实有效。当view会被dismiss时,在Safari什么都不留下,释放他的内存占用: