ios - MonoTouch通用限制和iOS模拟器

标签 ios xamarin.ios ios-simulator

MonoTouch documentation声明它不支持虚拟通用方法。

但是,在我的MonoTouch项目中,我有

public class ListMaker<T>
{
    public ListMaker() {}

    public virtual List<T> MakeList(T t1, T t2)
    {
        return new List<T>{t1, t2};
    }
}

public class ReverseListMaker<T> : ListMaker<T>
{
    public ReverseListMaker() {}

    public override List<T> MakeList(T t1, T t2)
    {
        return new List<T>{t2, t1};
    }
}

还有其他地方
ListMaker<string> lm = new ReverseListMaker<string>();
List<string> strings = lm.MakeList("hello", "world");

现在,我期望它不应该编译。但是,它正在iOS模拟器上编译并运行。

该限制仅适用于设备的实际ARM体系结构吗?还是文档过时了?

最佳答案

简短答案:

该限制仅适用于设备的实际ARM体系结构吗?



还是文档过时了?

没有

长答案:

大多数MonoTouch limitations由以下规则所规定:所有应用程序必须遵循这些规则才能在iOS 设备上运行。

这包括对泛型的一些限制,因为 AOT (提前)编译器无法知道需要生成代码的所有可能情况。

但是,由于规则仅适用于设备,并且AOT编译需要花费一些时间,因此在模拟器上使用时,MonoTouch将使用 JIT (即时)编译器。这样可以加快代码构建-调试周期的速度,并使开发更加有趣。缺点是,这可能会隐藏一些限制(例如AOT的限制)。

但是,在许多情况下,iOS模拟器的行为与设备的行为截然不同。 IOW可以在模拟器上运行的东西并不意味着它(至少可以很好地或完全不能)在设备上运行。因此,所有(或大多数)测试应在(如果可能的话,许多不同的)设备上进行。

关于ios - MonoTouch通用限制和iOS模拟器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9551524/

相关文章:

ios - phonegap IOS 应用大小

ios - Swift - 从 Apple HealthKit 获取葡萄糖数据

ios - Xamarin iOS : Pass credentials over http

ios - 模拟器在 iPhone 6 Plus 的缩放模式下运行?

ios - 关于在真实设备中安装 iOS 应用程序

ios - 保存从查询中获取的用户的属性(即不在当前用户上)

ios - 显示没有 TextField 的 iOS 屏幕键盘

c# - 将音频文件转换为 mp3

ios - 在弹出时将数据传回 uiviewcontroller (NavigationController.PopViewController)

iphone - 无法将 MapKit 用户坐标转换为屏幕坐标