Ios WkWebView实例和内存泄漏
我想知道是否有办法减少或重用wkwebview的实例,因为每次在wkwebview上实现一个方法时Ios WkWebView实例和内存泄漏,ios,swift,xcode,wkwebview,Ios,Swift,Xcode,Wkwebview,我想知道是否有办法减少或重用wkwebview的实例,因为每次在wkwebview上实现一个方法时 wkWebView.load(myRequest) 将生成一个web实例并将其保留在内存中,在使用Safari进行调试时,我可以看到所有这些实例: 每次显示同一页时,内存消耗都会增加: 加载“about:blank”并不能解决问题,wkWebView=nil。经过一些研究,我发现了我的错误: let webConfig = WKWebViewConfiguration() let userC
wkWebView.load(myRequest)
将生成一个web实例并将其保留在内存中,在使用Safari进行调试时,我可以看到所有这些实例:
每次显示同一页时,内存消耗都会增加:
加载“about:blank”并不能解决问题,wkWebView=nil。经过一些研究,我发现了我的错误:
let webConfig = WKWebViewConfiguration()
let userController:WKUserContentController = WKUserContentController()
userController.add(self, name: "interOp")
在viewDidLoad中导致内存泄漏,因为该userController从未被释放(对于wkwebview也是如此)
我的解决方案是:在包含wkWebView的viewController类中声明WKUserContentController:
var userController: WKUserContentController = WKUserContentController()
在viewDidLoad中对其的引用:
userController.add(self, name: "interOp")
webConfig.userContentController = userController;
然后在ViewWillEnglish中释放它:
userController.removeScriptMessageHandler(forName: "interOp")
也许这不是处理这个问题的更好方法,但它是有效的。当视图被取消时,它在Safari中不会留下任何内容并释放其内存占用:
经过一些研究,我发现了我的错误:
let webConfig = WKWebViewConfiguration()
let userController:WKUserContentController = WKUserContentController()
userController.add(self, name: "interOp")
在viewDidLoad中导致内存泄漏,因为该userController从未被释放(对于wkwebview也是如此)
我的解决方案是:在包含wkWebView的viewController类中声明WKUserContentController:
var userController: WKUserContentController = WKUserContentController()
在viewDidLoad中对其的引用:
userController.add(self, name: "interOp")
webConfig.userContentController = userController;
然后在ViewWillEnglish中释放它:
userController.removeScriptMessageHandler(forName: "interOp")
也许这不是处理这个问题的更好方法,但它是有效的。当视图被取消时,它在Safari中不会留下任何内容并释放其内存占用:
我在体验这种情况时发现的唯一选择是不打开这么多Webview实例,我必须关闭view controller才能使用webview打开下一个。选项如果您知道不会有太多的web视图,您可以为此webview创建全新的
WKProcessPool
,我在体验此操作时发现的唯一选项是不打开这么多webview实例,我必须关闭view controller才能使用webview打开下一个。选项如果您知道不会有那么多web视图,则可以为此webview创建全新的WKProcessPool