MonoTouch如何工作?

Ant*_*ton 16 translation cross-platform xamarin.ios

我真的很感激任何人都能简单解释一下,实现像MonoTouch这样的东西的一般方法是什么?我真的很惊讶,因为它不是我看到的第一个例子,当人们获得像Java这样的平台并将其翻译成类似C/Objective-C的东西时.我无法想象如何翻译垃圾收集器和东西.

提前致谢.

编辑:我理解将一种语言翻译成另一种语言的理论可能性.我的问题更具技术性:他们是否在ObjC中实现了一个完整的运行时并捆绑它?(我怀疑......)或者他们只是将C#代码翻译成ObjC/binary/etc?

Mik*_*son 39

MonoTouch不是翻译.它只是在iPhone上运行的Mono运行时,有一些奇特的技巧使它与iPhone的限制兼容.

传统的Mono"运行时"不仅仅是JIT,它还处理GC,反射,I/O层,线程,异常等.还有类库.为了让您的应用程序在iPhone上运行,应用程序中必须包含大部分内容.减肥可带来一些挑战.此外,iPhone可以防止JIT运行时代码生成,只运行签名代码,并且不允许动态库.

MonoTouch的作用是使用IL链接器将代码使用的类库的各个部分组合成单个IL二进制文件.然后,它使用AOT编译来预生成JIT通常从IL生成的所有本机代码,然后将其与无JIT运行时一起链接到可以签名的单个本机二进制文件中.最后,IL从托管二进制文件中删除.只留下元数据.


Ank*_*oel 8

Monotouch使用Ahead-Of-Time编译来生成单个静态编译的文件 - 因此它不会在iPhone上实现.Net运行时.Monotouch使用绑定到暴露于C#的iPhone库.没有对Objective-C的翻译.

基本上,它使您熟悉在C#及其相关工具链中工作,同时暴露底层iPhone OS的库调用.

Miguel di Icaza在Stackoverflow播客上解释了这一点,他是一位嘉宾.链接