因此,我具有以下控件,该控件是从Label
扩展过来的
public Hyperlink()
{
var tapGesture = new TapGestureRecognizer();
tapGesture.Tapped += TapGesture_Tapped;
this.GestureRecognizers.Add(tapGesture);
}
现在我的问题是,我是否需要解开GestureRecogniser
?
我对 GarbageCollection 的理解是,由于Hyperlink
对象负责tapGesture
,因此应该可以处理它;但这就是Xamarin.Forms的世界。
所以我需要Dispose
代码来避免潜在的内存泄漏并避免使对象保持活动状态
public void Dispose()
{
if (this.GestureRecognizers.Count > 0)
{
var tapGesture = this.GestureRecognizers[0] as TapGestureRecognizer;
tapGesture.Tapped -= TapGesture_Tapped;
this.GestureRecognizers.Clear();
}
}
答案 0 :(得分:1)
根据Cross-Platform Performance,建议您取消订阅GestureRecogniser。
为防止内存泄漏,应该在处理订阅者对象之前取消订阅事件。在取消订阅事件之前,发布对象中事件的委托人具有对该委托的引用,该委托封装了订阅者的事件处理程序。只要发布对象拥有此引用,垃圾回收就不会回收订户对象的内存。
答案 1 :(得分:-1)
除非您使用永久性页面,否则无需手动处置手势识别器。当任何正在使用它的页面被GC弹出并收集时,它将被销毁。
如果让您放心,您仍然可以手动处理它,它不会造成任何伤害,但这不是必需的。