每个monotouch UIKit变量都需要在类范围内吗?

时间:2013-06-10 19:47:43

标签: xamarin.ios

this Xamarin forum post中,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对象在这方面是否特别?

1 个答案:

答案 0 :(得分:4)

您无需保留对UIImage的引用,因为UIImageView将为您保留一个并在处理时清理它。