iOS中订阅事件的最佳方法是ViewDidLoad,但是当关闭视图时,不会调用ViewDidUnload()(仅当内存警告时。)
哪个地方最好取消订阅活动?
(在subviewController中我订阅了一个引用MainViewController的事件,当打开子视图两次时,我收到两个事件触发器,因为从未调用viewdidunload()中的取消订阅。)
ViewWillAppear / ViewWillDisapper中的订阅/取消订阅怎么样?
public override void ViewWillAppear (bool animated)
{
base.ViewWillAppear (animated);
this.mBL.OrderChanged += HandleOrderChanged;
}
public override void ViewWillDisappear (bool animated)
{
base.VieWillDisappear (animated);
if (this.mBL!=null)
this.mBL.OrderChanged -= HandleOrderChanged;
}
答案 0 :(得分:1)
使用ViewDidLoad
和ViewDidUnload
,这些是从UI订阅/取消订阅事件的合适位置。
以下是iOS中关于内存管理的一般文章,我认为适用于此:http://www.buildingiphoneapps.com/buildingiphoneapps/2010/6/25/memory-management-and-viewdidunload.html
现在,如果您不希望在View不可见时运行事件,请在事件处理程序中执行以下操作:
if (IsViewLoaded && View.Window != null) {
//code here
}
我发现这是判断视图是否在屏幕上的最简单方法。
答案 1 :(得分:0)
我同意,最好的时间是ViewWillAppear / ViewWillDisappear,而不是ViewDidUnload。
调用ViewDidUnload,称为iOS 6后: https://developer.xamarin.com/api/member/UIKit.UIViewController.ViewDidUnload()/