2015-10-26 52 views
1

在我UIViewControllerviewDidLoad方法,我預訂通知如下:Xamarin NSNotificationCenter:何時調用RemoveObserver?

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

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

我的問題是我在哪裏刪除觀察員,以便有沒有內存泄漏。通常在Objective-C中,我會在dealloc方法中刪除它。

但是,如果我在Dispose方法或析構函數中嘗試使用Dispose上面的disposable,則會因循環而導致內存泄漏。什麼是防止這種記憶週期的最好方法?

注意:我不能使用ViewWillAppear/ViewWillDisappear作爲添加/刪除觀察者的方法,因爲當視圖控制器的視圖不在前臺時需要訪問它。

回答

0

我寫了關於我自己在Xamarin.iOS here內存泄漏方面的經驗。

tl; dr:使用ViewDidDisappear並檢查控制器是否實際被彈出或解散,清理。

+0

在ViewDidDisappear中,你怎麼知道控制器不再被使用?我的控制器是UITabBarController的一部分。所以它不會從UINavigationController彈出或解散。 –

相關問題