Monotouch.Dialog インスタンスを破棄する場合:
- カスタム
UIBubbleMapElement
要素は GC によって破棄されます。 - 破棄された要素ごとに、カスタム
UIBubbleMapCell
も GC によって破棄されます。 - しかし、破棄されたすべてのセルについて、彼らの習慣
UIBubbleMapView
はどれも破棄されていません。
この問題を解決するために、Mono Profiler アプリケーションの使用を開始しました。
問題は、破棄されていないUIBubbleMapView
インスタンスの逆参照イメージを見ることです。この最後の参照を解放して、カスタム ビューを収集できるようにするにはどうすればよいですか?
最後に、これは私のUIBubbleMapCell
破棄方法です:
protected override void Dispose (bool disposing) {
bubbleMapView = null;
System.Diagnostics.Debug.WriteLine ("############# {0} 'Dispose' {1}.", this, disposing ? "invoked directly" : "called by the garbage collector finalizer");
base.Dispose (disposing);
}
そして、これは私がコンソールに出力したものです:
############# <UIBubblesViewController: 0x152427c0> 'Dispose' called by the garbage collector finalizer.
############# <UIBubbleMapCell: 0x152b6a40; baseClass = UITableViewCell; frame = (0 195; 320 38); autoresize = W; layer = <CALayer: 0x152c65c0>> 'Dispose' called by the garbage collector finalizer.
############# <UIBubbleMapCell: 0x1524aba0; baseClass = UITableViewCell; frame = (0 35; 320 38); autoresize = W; layer = <CALayer: 0x152038f0>> 'Dispose' called by the garbage collector finalizer.
############# <UIBubbleMapCell: 0x17c91710; baseClass = UITableViewCell; frame = (0 233; 320 116); autoresize = W; layer = <CALayer: 0x152cbb80>> 'Dispose' called by the garbage collector finalizer.
############# <UIBubbleMapCell: 0x1520b2c0; baseClass = UITableViewCell; frame = (0 108; 320 52); autoresize = W; layer = <CALayer: 0x17c2fc30>> 'Dispose' called by the garbage collector finalizer.
編集:答えてくれてありがとうロルフ。
最初に、次のコードを UITableViewCell Dispose メソッドに追加しました。
bubbleMapView.Dispose ();
bubbleMapView = null;
コンソール内で次のメッセージを受信しても、Mono プロファイラーはまだオブジェクトを収集されていないと表示します。以前と同じ画像。
############# <UIBubbleMapView: 0x154af370; frame = (0 0; 1 1); layer = <CALayer: 0x154af0e0>> 'Dispose' invoked directly.
intruments アプリで実行すると、その参照カウントが 1 より大きいことがわかります。
画像にはUIBubbleTextView
インスタンスがありますが、インスタンスとまったく同じように動作しUIBubbleMapView
ます。
私UIBubbleMapView
はいくつかの他の見解を持っています。逆参照にチェックを入れていない場合のプロファイラー情報です。この種のサブビューを処理するためのトリックはありますか?