观看Mark Probst 和 Rodrigo Kumpera 的Advanced Memory Management,我学习了新技术,例如分析 Mono GC 和使用WeakReference
.
但是我仍然不明白如何从第 28 分钟开始“修复”谜题 2:
public class CustomButton : UIButton {
public CustomButton () { }
}
public class Puzzle2Controller : UIViewController
{
public override void ViewDidLoad ()
{
var button = new CustomButton ();
View.Add (button);
button.TouchUpInside += (sender, e) =>
this.RemoveFromParentViewController ();
}
}
控制器持有一个对按钮的引用,该按钮持有对事件处理程序的引用,事件处理程序持有对控制器的引用。
打破循环的一种方法是取消按钮。另一种方法是分离处理程序(但我们必须放弃使用 lamdas)。
还有其他/更优雅/打破循环的方法吗?我们可以以某种方式坚持WeakReference
在这里吗?
谢谢。
编辑:在这种情况下,按钮甚至不是一个字段。但还是有一个循环,不是吗?它在控制器视图的子视图中。我们必须清除它们吗?我很困惑。