在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
对象在这方面是否特别?
答案 0 :(得分:4)
您无需保留对UIImage
的引用,因为UIImageView
将为您保留一个并在处理时清理它。