我遇到了反射方法 GetMethod 不返回类的静态方法的问题。这只会在实际的 iPhone 上出错;在模拟器上它工作正常。我尝试了以下方法:
MethodInfo methInfo = _type.GetMethod (methodName);
和
MethodInfo methInfo = _type.GetMethod (methodName, System.Reflection.BindingFlags.Static);
但它们都不返回methodName 中指定的方法。指定的方法确实存在,正如它在模拟器上运行的事实所表明的那样。我已与调试器确认我的成员变量 _type 确实包含正确的类类型引用。我尝试检索的方法在类中声明为公共(public)方法。
有没有人以前遇到过这个问题或者知道为什么这可以在模拟器上运行但不能在实际的 iphone 上运行?
最佳答案
Reflection 虽然不能在 iOS 上完全运行,但可以工作。问题是链接器在设备的配置上被激活并且正在切断该方法,因为它没有被使用。链接器无法“看到”反射调用。
如果是自定义对象,用PreserveAttribute修饰:
[Preserve(AllMembers=true)]
public class MyClass
{}
如果它是来自 SDK 的对象,您有两种选择:
- 完全禁用链接器。这不好,因为最终尺寸会很大。
- 直接在您的代码中使用该方法一次,以便链接器知道它在那里并且不会删除它。
关于c# - 反射方法 GetMethod 在 iphone 上不返回类的静态方法,但在模拟器上返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5972323/