反射方法GetMethod不会在iphone上返回类的静态方法,但会在模拟器上返回

时间:2011-05-12 01:13:53

标签: c# iphone xamarin.ios

我遇到了一个问题,即反射方法GetMethod没有为类返回静态方法。这只是在实际的iPhone上出错了;在模拟器上它正常工作。我尝试过以下方法:

MethodInfo methInfo = _type.GetMethod (methodName);

MethodInfo methInfo = _type.GetMethod (methodName, System.Reflection.BindingFlags.Static);

但这些都不会返回 methodName 中指定的方法。指定的方法确实存在,因为它在模拟器上工作。我已经使用调试器确认我的成员变量_type确实包含正确的类类型引用。我试图检索的方法在类中声明为public。

之前是否有人遇到此问题或者知道为什么这会在模拟器上运行而不是在实际的iphone上运行?

1 个答案:

答案 0 :(得分:7)

反思虽然在iOS上无法完全运行,但却有效。问题是链接器在设备配置上被激活,并且因为没有使用它而切断了该方法。链接器无法“看到”反射调用。

如果是自定义对象,请使用PreserveAttribute:

进行装饰
[Preserve(AllMembers=true)]
public class MyClass
{}

如果它是SDK中的对象,您有两种选择:

  1. 完全禁用链接器。这不好,因为最终尺寸会很大。
  2. 直接在代码中使用该方法一次,以便链接器知道它在那里并且不会剥离它。