このXamarin フォーラムの投稿で、Xamarin 管理者は次のようにClancey述べています。
しかし、一般的なルールとして、UIButton など、そのような操作を行うものはすべて、それへの参照を保持する必要があります。
例えば:
//This can will blow up
public override ViewDidLoad()
{
var myButton = new UIButton();
myButton.Tapped += delegate{
//do something
};
View.AddSubview(myButton);
}
これはmyButton、スコープ外に出て GC されているためですが、基になる iOS ボタン ハンドルはまだ有効であり、ObjectiveC がそのボタン ハンドルを使用して Mono にコールバックすると、アプリがクラッシュします。したがってmyButton、クラスレベルの変数を作成して、生き続ける必要があります。
私の質問は: のような他の種類の UIKit オブジェクトはUIImageどうですか? 私がこれをするとします:
var image = new UIImage(sFilename);
ctlImageView = new UIImageView(image);
this.View.Add(ctlImageView);
ctlImageViewクラススコープにありますが、imageそうではありません。これにより、同じ種類のメモリ リークが発生imageする可能性がありますか?また、クラス スコープにある必要がありますか? それともUIView、この点でオブジェクトは特別ですか?