以下に示すように、入れ子になった UITableViewSource クラスの新しいインスタンスに .Source プロパティを設定して、MonoTouch (Xamarin.iOS) で UITableView を作成するパターンに従います。別の開発者が注意を喚起した懸念は、ネストされたクラスのコンストラクターで割り当てられた _parentController プロパティを介してネストされたクラスが親クラスを参照するため、この UITableView クラスがガベージ コレクションを取得しないことです。ネストされたクラスがこの参照を保持している限り、親クラスは収集できないと考えられています。
これが本当かどうか、ガベージ コレクションがリソースを解放できないため、この方法で UITableView を作成することは良いプログラミング手法ではないことを誰でも確認できますか? (簡潔にするために一部のメソッドとコンストラクターは省略されています。
public partial class MyViewController : UITableViewController
{
public override ViewDidLoad()
{
base.ViewDidLoad();
this.TableView.Source = new ViewSource(this);
}
public class ViewSource : UITableViewSource
{
MyViewController _parentController;
public ViewSource(MyViewController parentController)
{
_parentController = parentController;
}
}
}