我使用setURLSchemeHandler (与WKURLSchemeHandler协议一起使用)如下:
let config = WKWebViewConfiguration()
config.setURLSchemeHandler(self, forURLScheme: "local")
WebView = WKWebView(frame: CGRect(x:0, y:0, width:self.view.frame.width, height:self.view.frame.height), configuration: config)当我拒绝这个视图控制器时,就不会调用"deinit“。其原因是在以下方面使用了"self“:
config.setURLSchemeHandler(self, forURLScheme: "local")我的问题是,如何在取消视图之前删除方案处理程序?
发布于 2022-03-30 14:17:21
基于对similar issue的答复(感谢@DefyingL的提示),我现在提出了以下解决方案:
class LeakAvoider : NSObject, WKURLSchemeHandler {
func webView(_ webView: WKWebView, start urlSchemeTask: WKURLSchemeTask) {
self.delegate?.webView(webView, start: urlSchemeTask)
}
func webView(_ webView: WKWebView, stop urlSchemeTask: WKURLSchemeTask) {
self.delegate?.webView(webView, stop: urlSchemeTask)
}
weak var delegate : WKURLSchemeHandler?
init (delegate:WKURLSchemeHandler) {
self.delegate = delegate
super.init()
}
}然后将方案处理程序设置为:
config.setURLSchemeHandler(LeakAvoider(delegate:self), forURLScheme: "local")https://stackoverflow.com/questions/71678534
复制相似问题