【发布时间】:2015-09-14 15:26:09
【问题描述】:
不确定我是否在WebKit 中遇到了错误,或者我做错了什么,但我不知道如何使用WKScriptMessageHandler 而不导致WKScriptMessage.body 中包含的任何值泄漏。
我能够组建一个最小的 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>
当我运行项目然后在 Instruments 中打开内存调试器时,我看到以下泄漏:
如果我添加一个重新加载请求的按钮,并且这样做了几十次,应用程序的内存占用量会不断增长,并在达到某个阈值后崩溃。在这个最小的示例中崩溃之前可能需要一段时间,但在我每秒收到几条消息的应用中,崩溃需要不到 10 秒的时间。
整个项目可以downloaded here。
知道发生了什么吗?
【问题讨论】:
标签: ios macos memory-leaks webkit javascriptcore