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

标签 c# iphone xamarin.ios

我遇到了反射方法 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 的对象,您有两种选择:

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

关于c# - 反射方法 GetMethod 在 iphone 上不返回类的静态方法,但在模拟器上返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5972323/

相关文章:

c# - 更改包含具有 ItemContainerStyle 上的控件模板并绑定(bind)到 CollectionViewSource 的列表框的选项卡时,应用程序崩溃

xamarin.ios - MVVMCross 更新绑定(bind)到 UITableViewCell

iphone - 使用 CGPoints 在 UIImageView 中画线

javascript - 当某个事件触发时,Javascript 可以在 iOS 中调用任何东西吗?

iphone - UIPasteboard顽固地坚持,无论我做什么

ios - Xamarin Forms iOS 状态栏文本颜色

c# - 绑定(bind)到 Text 属性 ios-unified 不起作用

c# - 使用 C# 的接口(interface)序言

c# - 如何将格式化的电子邮件地址解析为显示名称和电子邮件地址?

c# - 是否可以使用 linq 运行查询来搜索一段时间?