在 Xamarin 中处理 WKWebView
Disposing a WKWebView in Xamarin
我想知道如何正确处理 webview,以便在任何给定时间您只有一个实例?目前,每次我打开一个 webview 时,我都可以在我的 chrome 调试工具中看到它。除了这会耗尽内存之外,这还会导致 webview 显示内容不正确的问题,因为它似乎试图一个接一个地加载,直到它最终到达它拥有的最终 webview。
我试过这样处理它:
protected override void Dispose(bool disposing) {
webView.Dispose();
webView = null;
base.Dispose(disposing);
}
当然,考虑到我的问题,似乎没有用。我的 webview 位于 UIViewController 内部,而 UIViewController 本身位于另一个内部。我对 dispose 的理解是,一旦 UIViewController 不再显示在屏幕上,就应该在其上调用 dispose 方法(理论上)。
为什么要手动释放webView
?从这个 documentation,我们知道对于 UIViewController,如果它从导航堆栈中弹出,并且该对象持有的任何托管对象引用也将被释放或释放。 Dispose
方法将被自动调用,它的所有子视图也将被释放。无需在 Dispose(bool disposing)
中手动调用它。
My webview sits inside of a UIViewController which in itself is
sitting inside of another one.
您的意思是 UIViewController
可能包含多个 webView,并且您想在某个时间发布一个?尝试:
webView.RemoveFromSuperview();
webView = null;
我想知道如何正确处理 webview,以便在任何给定时间您只有一个实例?目前,每次我打开一个 webview 时,我都可以在我的 chrome 调试工具中看到它。除了这会耗尽内存之外,这还会导致 webview 显示内容不正确的问题,因为它似乎试图一个接一个地加载,直到它最终到达它拥有的最终 webview。
我试过这样处理它:
protected override void Dispose(bool disposing) {
webView.Dispose();
webView = null;
base.Dispose(disposing);
}
当然,考虑到我的问题,似乎没有用。我的 webview 位于 UIViewController 内部,而 UIViewController 本身位于另一个内部。我对 dispose 的理解是,一旦 UIViewController 不再显示在屏幕上,就应该在其上调用 dispose 方法(理论上)。
为什么要手动释放webView
?从这个 documentation,我们知道对于 UIViewController,如果它从导航堆栈中弹出,并且该对象持有的任何托管对象引用也将被释放或释放。 Dispose
方法将被自动调用,它的所有子视图也将被释放。无需在 Dispose(bool disposing)
中手动调用它。
My webview sits inside of a UIViewController which in itself is sitting inside of another one.
您的意思是 UIViewController
可能包含多个 webView,并且您想在某个时间发布一个?尝试:
webView.RemoveFromSuperview();
webView = null;