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