2012-04-14 8 views
1

iOSでイベントを購読する最も良い方法はViewDidLoadですが、ビューを閉じるとViewDidUnload()は呼び出されません(メモリの警告がある場合のみ)。Monotouch/iOS:デリゲートの退会に最も適した場所

イベントを退会するのに最も適した場所はどれですか?

は、(サブビューは二回、私は(viewdidunloadに退会ので、2つのイベントトリガを受信すると、オープンsubviewControllerでは、私は、MainViewControllerを参照するイベントをサブスクライブ)と呼ばれることはありません。)

どう購読/購読中止で約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;   
    } 

答えて

1

使用ViewDidLoadViewDidUnload、それらがUIから/退会イベントをサブスクライブするために、適切な場所です。 http://www.buildingiphoneapps.com/buildingiphoneapps/2010/6/25/memory-management-and-viewdidunload.html

を今、あなたのビューが表示されていないときは、イベントの実行を持って望んでいないしている場合、このような何かを:ここでは

は、私が思うのiOSでのメモリ管理に関する一般的な記事はここに適用されていますイベントハンドラ:

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

これは、ビューが画面に表示されているかどうかを確認する最も簡単な方法です。

+0

ViewWillAppearとViewWillDisappear()を使用して何が悪いですか?チェックは必要ありません。あなたの小切手に関するもう1つの質問:ViewDidUnloadの中で "View.Window"を呼び出すと、 "View"コールがビューを再度読み込まないでしょうか? – Krumelur

+0

私はViewWillAppearとViewWillDisappearを使用しています。 – BlueSky

+0

UINavigationControllerの内部で、ViewWillAppearとViewWillDisappearが期待どおりに機能しないことに注意してください。 ViewWillAppear/Disappearは、コントローラがオーバー押しされたときに呼び出されることはありません。モーダルビューコントローラでも同様です。 – jonathanpeppers

関連する問題