1

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

4

1 に答える 1