Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios WkWebView实例和内存泄漏_Ios_Swift_Xcode_Wkwebview - Fatal编程技术网

Ios 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的实例,因为每次在wkwebview上实现一个方法时

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