【问题标题】:Xamarin NSNotificationCenter: When to call RemoveObserver?Xamarin NSNotificationCenter:何时调用 RemoveObserver?
【发布时间】:2015-10-26 19:37:59
【问题描述】:

在我的UIViewControllerviewDidLoad 方法中,我订阅了如下通知:

public override void ViewDidLoad()
{
   base.ViewDidLoad();

   this.disposable = NSNotificationCenter.DefaultCenter.AddObserver("UserUpdated", () => UserUpdated());
}

我的问题是我应该在哪里移除观察者,以免内存泄漏。通常在 Objective-C 中,我会在 dealloc 方法中删除它。

但是如果我在Dispose方法或者析构函数中尝试Dispose上面的disposable,就会因为循环而出现内存泄漏。防止这种记忆循环的最佳方法是什么?

注意:我不能使用ViewWillAppear/ViewWillDisappear 作为添加/删除观察者的方法,因为当视图控制器的视图不在前台时我需要访问它。

【问题讨论】:

    标签: c# ios memory-leaks xamarin xamarin.ios


    【解决方案1】:

    我写了关于 Xamarin.iOS here 内存泄漏的自己的经历。

    tl;dr:使用ViewDidDisappear 并检查控制器是否真的被弹出或关闭,以进行清理。

    【讨论】:

    • 在 ViewDidDisappear 中如何知道控制器不再使用?我的控制器是 UITabBarController 的一部分。所以它不会从 UINavigationController 中弹出或关闭。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 2012-12-04
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多