这会导致C#
Xamarin内存泄漏吗?即可以释放MyViewController还是有循环引用,阻止它?
在MyViewController中:
this.TableView.Source = new ViewSource(this);
public class ViewSource : UITableViewSource
{
private readonly MyViewController parentController;
public ViewSource(MyViewController parentController)
{
this.parentController=parentController;
}
}
根据:
Will a UITableViewController Garbage Collect if it instances a nested class referencing itself in a variable?这不是问题。但如果Source是弱者,那么如果你只有:
会发生什么this.TableView.Source = new ViewSource();
来源可以从下一行发布吗?无论哪种方式,这似乎是一个非常危险的API。
答案 0 :(得分:1)
其他人可能会说它比我好,但用几句话说:不要担心你的第二个案子。 GC
问题主要发生在Xamarin.iOS上,如果托管对象中的周期与obj-C
对应项之间存在强关系。
在您的(第二个)案例中,只要ViewSource
存在,新创建的TableView
就会保持活跃状态。我在这里谈论托管对象。在不再使用TableView
时,Xamarin.iOS GC
会标记它,以及ViewSource
,它们都将被处理。
不幸的是,这是Xamarin.iOS的少数漏洞抽象之一,你需要了解潜在的Obj-C来做出设计决策。