1

iOS でイベントをサブスクライブする最良の方法は ViewDidLoad ですが、ビューを閉じると、ViewDidUnload() は呼び出されません (メモリ警告の場合のみ)。

イベントの購読を解除するのに最適な場所はどこですか?

(subviewController では、MainViewController を参照するイベントをサブスクライブします。サブビューを 2 回開くと、viewdidunload() のサブスクライブ解除が呼び出されないため、2 つのイベント トリガーを受け取ります。)

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

ViewDidLoadおよびを使用しViewDidUnloadます。これらは、UI からイベントをサブスクライブ/サブスクライブ解除する適切な場所です。

ここに当てはまると思われるiOSのメモリ管理に関する一般的な記事を次に示します。

ビューが表示されていないときにイベントを実行したくない場合は、イベント ハンドラーで次のようにします。

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

これが、ビューが画面上にあるかどうかを確認する最も簡単な方法であることがわかりました。

于 2012-04-15T22:05:31.703 に答える
0

ViewDidUnload ではなく、ViewWillAppear/ViewWillDisappear に最適な時間があることに同意します。

ViewDidUnload は、iOS 6 以降と呼ばれます: https://developer.xamarin.com/api/member/UIKit.UIViewController.ViewDidUnload()/

于 2016-05-21T02:22:58.567 に答える