【问题标题】:Disposing a WKWebView in Xamarin在 Xamarin 中处理 WKWebView
【发布时间】:2018-04-19 18:12:17
【问题描述】:

我想知道如何正确处理 webview 以便在任何给定时间只有一个实例?目前,每次打开 webview 时,我都可以在我的 chrome 调试工具中看到它。除了耗尽内存之外,这还会导致 webview 显示内容不正确的问题,因为它似乎试图一个接一个地加载,直到它最终到达它拥有的最终 webview。

我尝试这样处理它:

protected override void Dispose(bool disposing) {
            webView.Dispose();

            webView = null;
            base.Dispose(disposing);
        }

当然,鉴于我的问题,它似乎无法正常工作。我的 webview 位于 UIViewController 内部,而 UIViewController 本身位于另一个内部。我对 dispose 的理解是,一旦 UIViewController 不再显示在屏幕上,就应该在其上调用 dispose 方法(理论上)。

【问题讨论】:

    标签: c# ios xamarin wkwebview


    【解决方案1】:

    为什么要手动释放webView?从这个documentation,我们知道对于UIViewController,如果它从导航堆栈中弹出,并且该对象持有的任何托管对象引用也会被释放或释放。 Dispose 方法将被自动调用,并且它的所有子视图也将被释放。无需手动在Dispose(bool disposing) 中调用。

    我的 webview 位于 UIViewController 内部,它本身就是 坐在另一个里面。

    您的意思是UIViewController 可能包含多个webView,并且您想在某个时间发布一个?试试:

    webView.RemoveFromSuperview();
    webView = null;
    

    【讨论】:

    • 这实际上是我最终决定的,从 webview 中删除它是修复的一部分,同时在我的 dispose 方法中删除了我的 web 消息处理程序。我会把它标记为正确的,因为它是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多