【发布时间】:2014-07-17 09:09:28
【问题描述】:
当我像这样在 ViewDidLoad 中使用反射时:
foreach (var m in this.GetType().GetMethods()) {
Console.WriteLine (m.Name);
}
无需任何其他代码,方法如
Add
set_View
不在那里;当我添加时;
public void PreventOptimizing() {
var x = this.View;
this.View = x;
this.Add (null);
}
到类并且不调用该方法,它们就在那里。所以我假设 AOT 编译优化了这些方法,因为它们没有被调用。我不知道它添加了哪些方法,所以我希望编译器在我的实验中不要优化任何东西。怎么可能呢?还是有其他技巧可以防止自动删除方法?
编辑:完整的代码,如果这还不够清楚的话;
- 结果输出将不包含“Add”和“set_View”;
public class TestController : UIViewController { public override void ViewDidLoad () { base.ViewDidLoad (); foreach (var m in this.GetType().GetMethods()) { Console.WriteLine (m.Name); } } }
- 输出确实包含 Add 和 set_View;
public class TestController : UIViewController { public void PreventOptimizing() { var x = this.View; this.View = x; this.Add (null); } public override void ViewDidLoad () { base.ViewDidLoad (); foreach (var m in this.GetType().GetMethods()) { Console.WriteLine (m.Name); } } }
【问题讨论】: