Xamarin UITableView Source是弱还是强?

时间:2013-08-31 09:59:26

标签: uitableview xamarin.ios garbage-collection xamarin weak

这会导致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。

1 个答案:

答案 0 :(得分:1)

其他人可能会说它比我好,但用几句话说:不要担心你的第二个案子。 GC问题主要发生在Xamarin.iOS上,如果托管对象中的周期与obj-C对应项之间存在强关系。

在您的(第二个)案例中,只要ViewSource存在,新创建的TableView就会保持活跃状态​​。我在这里谈论托管对象。在不再使用TableView时,Xamarin.iOS GC会标记它,以及ViewSource,它们都将被处理。

不幸的是,这是Xamarin.iOS的少数漏洞抽象之一,你需要了解潜在的Obj-C来做出设计决策。