不知道我是否在WebKit
中遇到了错误,或者我正在做一些可怕的错误,但我无法弄清楚如何使用WKScriptMessageHandler
而不会导致WKScriptMessage.body
中包含的任何值泄漏。使用WKScriptMessageHandler时发生内存泄露
我能够把一个最小的Mac项目放在一起,以隔离问题,但无济于事。
在主视图控制器:
class ViewController: NSViewController {
var webView: WKWebView?
override func viewDidLoad() {
super.viewDidLoad()
let userContentController = WKUserContentController()
userContentController.addScriptMessageHandler(self, name: "handler")
let configuration = WKWebViewConfiguration()
configuration.userContentController = userContentController
webView = WKWebView(frame: CGRectZero, configuration: configuration)
view.addSubview(webView!)
let path = NSBundle.mainBundle().pathForResource("index", ofType: "html")
let url = NSURL(fileURLWithPath: path!)!
webView?.loadRequest(NSURLRequest(URL: url))
}
}
extension ViewController: WKScriptMessageHandler {
func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {
print(message.body)
}
}
然后在index.html
文件:
<html>
<head></head>
<body>
<script type="text/javascript">
webkit.messageHandlers.handler.postMessage("Here's a random number for you: " + Math.random() * 10)
</script>
</body>
</html>
当我运行该项目,然后打开仪器的内存调试器,我看到下面的泄漏:
如果我添加了一个重新加载请求的按钮,并且执行了几次这样的操作,则应用程序的内存占用量不断增加,并在达到某个阈值后崩溃。在这个最小的例子中崩溃可能需要一段时间,但在我的应用程序中,我每秒收到几条消息,崩溃的时间不到10秒。
整个项目可以是downloaded here。
想知道发生了什么?
太棒了!非常感谢! –