MonoTouch一般限制和iOS模拟器
问题描述:
MonoTouch documentation指出它不支持虚拟通用方法。MonoTouch一般限制和iOS模拟器
然而,在我的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在模拟器上工作的东西并不意味着它可以在设备上工作(至少很好或完全一样)。因此,所有(或大部分)测试都应该在(如果可能的话)许多不同的设备上完成。
答
这不是一个通用的方法,它是一种泛型类型的方法。在模拟器和设备上没问题。如果在该方法中有另一个泛型类型参数(并且保持该方法为虚拟),那么它在模拟器或设备上不起作用。
这是一个泛型类型的方法,但它不是一个通用的方法......你确定它在MonoTouch上不起作用吗? – Guillaume 2013-02-22 09:14:01