我正在Xamarin项目的ViewDidLoad()中注册通知。但是,我看不到任何可以“删除”观察者的方法。即使View不可见,我也需要执行一些操作,因此无法在ViewWillAppear中提供它。有什么类似于“ deinit”方法的。
试用了C#中的“处理”方法,但未得到调用。
即使执行了“ PopViewController”,观察者仍然没有注销。不知道为什么即使删除了视图控制器,它也没有从内存中释放出来。
答案 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
,这可能不适合您正在尝试做。