在Xamarin iOS上的哪里删除通知观察器?

时间:2018-06-20 13:00:51

标签: ios xamarin notifications xamarin.ios nsnotificationcenter

我正在Xamarin项目的ViewDidLoad()中注册通知。但是,我看不到任何可以“删除”观察者的方法。即使View不可见,我也需要执行一些操作,因此无法在ViewWillAppear中提供它。有什么类似于“ deinit”方法的。

试用了C#中的“处理”方法,但未得到调用。

即使执行了“ PopViewController”,观察者仍然没有注销。不知道为什么即使删除了视图控制器,它也没有从内存中释放出来。

2 个答案:

答案 0 :(得分:0)

您可以为 ViewDidLoad 中的事件进行所有订阅,并且可以从IO自动取消订阅事件。如果您确实要取消订阅,请使用处置方法。

这是一个例子,

ViewController 中,

// Subscribing
public override void ViewDidLoad()
{
    _homeView.HomeButton.TouchUpInside += OnHomeButtonClicked;
}

// Unsubscribing
protected override void Dispose(bool disposing)
{
    _secondView.SecondButton.TouchUpInside -= OnSecondButtonClicked;
    base.Dispose(disposing);
}

答案 1 :(得分:0)

根据您的需要,您可以覆盖ViewWillAppear和/或ViewDidDisappear在此处添加/删除。

public override void ViewWillAppear(bool animated)
{
    base.ViewWillAppear(animated);
    // subscribe
}

public override void ViewDidDisappear(bool animated)
{
    base.ViewDidDisappear(animated);
    // unsubscribe
}

当将新控制器推到当前控制器上方时,将记住ViewDidDisappear,而弹出该新控制器时将再次调用ViewWillAppear,这可能不适合您正在尝试做。