सुनिश्चित नहीं है कि मैंने WebKit
में कोई बग मारा है या मैं कुछ गलत कर रहा हूं, लेकिन मुझे में रिसाव के लिए में जो भी मूल्य शामिल है, इसका उपयोग नहीं किया जा सकता है।WKScriptMessageHandler का उपयोग करते समय मेमोरी लीक
मैं इस मुद्दे को अलग करने के लिए एक न्यूनतम मैक प्रोजेक्ट को एक साथ रखने में सक्षम था, लेकिन इसका कोई फायदा नहीं हुआ।
मुख्य दृश्य नियंत्रक में:
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 हो सकती है।
क्या हो रहा है इसके बारे में कोई विचार?
शानदार! बहुत बहुत धन्यवाद! –