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什么都不留下,释放他的内存占用:
我想知道是否有一种方法可以减少或重用 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 中声明 WKUserContentControllervar userController: WKUserContentController = WKUserContentController()
在 viewDidLoad 中引用它:
userController.add(self, name: "interOp")
webConfig.userContentController = userController;
并在 viewWillDisappear 中释放它:
userController.removeScriptMessageHandler(forName: "interOp")
也许这不是解决此问题的更好方法,但它确实有效。当view会被dismiss时,在Safari什么都不留下,释放他的内存占用: