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

4

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

于 2013-06-10T19:54:05.507 回答