在此 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
在这方面对象是特殊的?