1

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;          
    }
4

2 回答 2

1

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

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

现在,如果您不想在视图不可见时运行事件,请在事件处理程序中执行以下操作:

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

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

于 2012-04-15T22:05:31.703 回答
0

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

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

于 2016-05-21T02:22:58.567 回答