这是否会导致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才能做出设计决策。