この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
、この点でオブジェクトは特別ですか?