私は以前、Objective-C言語を使用してiOSアプリを開発し、そのdealloc方法に依存して、アプリケーションでいくつかのクリーンアップ/登録解除タスクを実行していました。現在、MonoTouch(ガベージコレクション)では、オプションではなくなりました。
UIViewControllerそのプロパティのサブビューとして(サブクラス)Viewのインスタンスを追加するがあるとします。次に、別のマネージャー/グローバルオブジェクトからいくつかのイベントを受信するように自分自身を登録し、それに応じて自分自身を更新する方法を認識します(例:) 。MyViewUIViewMyViewonlineProfilesManager.Refreshed += () => <update UI with the new state>;
MyView画面に表示されている限り、すべて問題ありません。MyViewただし、イベントハンドラーから登録を解除できるように、画面からいつ削除されるかを知る必要があります。
Obj-Cでは、これはメソッドで簡単に行うことができます。これはdealloc、画面が変更されると、UIViewController割り当てが解除MyViewされ、そのスーパービューから削除されてから、MyViewdeallocメソッドが呼び出されるためです。
モノタッチでは、この「決定論的」フローはもうありません。UIViewControllerとデストラクタにいくつかのprintステートメントを入れようとしましたMyViewが、呼び出されません(理由は、MyViewがまだイベントハンドラに登録されているためです。いつ/どのように登録を解除するかわからないため、割り当てが解除されることはありません)。
誰かがMonoTouchでそのような状況を処理するための「パターン」が何であるか知っていますか?基本的なコンセプトが欠けていて、アプリの開発に苦労していると思います。
前もって感謝します。
編集 私の問題の解決策は弱いイベントパターンを使用しているように見えるので、質問を編集していますが、MonoTouchプラットフォームの実装が見つかりませんでした。
MonoTouchで弱いイベントパターンを使用する方法を知っている人はいますか?