Monotouch / iOS:哪个地方是取消订阅委托最好的地方

iOS中订阅事件的最好方法是ViewDidLoad,但是当closures视图时,不会调用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; } 

使用ViewDidLoadViewDidUnload ,这些是从UI订阅/取消订阅事件的合适位置。

这里是一个关于iOS的内存pipe理的一般性文章,我认为这里适用: http : //www.buildingiphoneapps.com/buildingiphoneapps/2010/6/25/memory-management-and-viewdidunload.html

现在,如果你不希望事件在视图不可见的情况下运行,那么在事件处理器中做这样的事情:

 if (IsViewLoaded && View.Window != null) { //code here } 

我发现这是判断视图是否在屏幕上的最简单的方法。

我同意,最好的时间是在ViewWillAppear / ViewWillDisappear,而不是ViewDidUnload。

ViewDidUnload被称为后iOS 6: https : //developer.xamarin.com/api/member/UIKit.UIViewController.ViewDidUnload()/

Interesting Posts