Rik*_*cma 1 xcode ios swift wkwebview
我想知道是否有办法减少或重用 wkwebview 的实例,因为每次在 wkwebview 上实现一个方法
wkWebView.load(myRequest)
Run Code Online (Sandbox Code Playgroud)
生成了一个 Web 实例并保留在内存中,我可以在使用 Safari 进行调试时看到它们:
每次显示相同的页面时,内存消耗都会增加:
加载“about:blank”并没有解决问题,还有wkWebView = nil。
经过一番研究,我发现了我的错误:
let webConfig = WKWebViewConfiguration()
let userController:WKUserContentController = WKUserContentController()
userController.add(self, name: "interOp")
Run Code Online (Sandbox Code Playgroud)
在 viewDidLoad 中导致内存泄漏,因为 userController 从未被释放(对于 wkwebview 也是如此)。
我的解决方案是:在包含 wkWebView 的 viewController 的类中声明 WKUserContentController:
var userController: WKUserContentController = WKUserContentController()
Run Code Online (Sandbox Code Playgroud)
在 viewDidLoad 中引用它:
userController.add(self, name: "interOp")
webConfig.userContentController = userController;
Run Code Online (Sandbox Code Playgroud)
并在 viewWillDisappear 中释放它:
userController.removeScriptMessageHandler(forName: "interOp")
Run Code Online (Sandbox Code Playgroud)
也许这不是解决这个问题的更好方法,但它确实有效。当视图被关闭时,它在 Safari 中什么都不留下并释放他的内存占用:
| 归档时间: |
|
| 查看次数: |
1761 次 |
| 最近记录: |