处理 Monotouch.Dialog 实例时:
- 自定义
UIBubbleMapElement
元素由 GC 处理; - 对于每个已处置的元素,
UIBubbleMapCell
GC 也会处置一个自定义元素; - 但是对于所有已处置的单元格,他们的习惯
UIBubbleMapView
都没有被处置。
为了解决这个问题,我开始使用 Mono Profiler 应用程序。
问题是:查看未处理的UIBubbleMapView
实例反向引用图像。我怎样才能发布最后一个引用并允许收集我的自定义视图?
最后,这是我的UIBubbleMapCell
dispose 方法:
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.
在仪器应用程序中运行时,我可以看到它的引用计数大于 1。
图像中有一个UIBubbleTextView
实例,但它的行为方式与实例完全相同UIBubbleMapView
。
我UIBubbleMapView
持有其他一些观点。这是未检查反向引用时的探查器信息。有一些技巧可以处理这些子视图吗?