Xamarin UITableView Source弱还是强



这是否会导致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;
    }
}

根据:

如果UITableViewController在变量中引用嵌套类,它会进行垃圾回收吗?这不是问题。但是如果Source是弱的,那么如果你只有会发生什么

this.TableView.Source = new ViewSource();

源是否可以从下一行中释放?不管怎样,这似乎是一个非常危险的API。

其他人可能会比我说得更好,但简而言之:不要担心你的第二种情况。如果托管对象中的循环与其obj-C对应对象之间存在强关系,则GC问题主要发生在Xamarin.iOS上。

在您的(第二种)情况下,只要TableView还活着,新创建的ViewSource就会一直存在。我在这里说的是托管对象。当不再使用TableView时,Xamarin.iOS GC将对其和ViewSource进行标记,并且它们都将被处理。

不幸的是,这是Xamarin.iOS为数不多的Leaky Abstraction之一,您需要了解底层的Obj-C才能做出设计决策。

相关内容

  • 没有找到相关文章

最新更新