Xamarin NSNotificationCenter:何时调用RemoveObserver?

时间:2015-10-26 19:37:59

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

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

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

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

我的问题是我在哪里删除观察者,以便没有内存泄漏。通常在Objective-C中,我会在dealloc方法中将其删除。

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

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

1 个答案:

答案 0 :(得分:0)

I wrote about my own experiences regarding memory leaks in Xamarin.iOS here.

tl;dr: Use ViewDidDisappear and check if the controller is actually be popped or dismissed, to clean up.