C#带.NET的本机IOS

C#带.NET的本机IOS,c#,ios,.net,xamarin,native,C#,Ios,.net,Xamarin,Native,我想开始学习Xamarin和IOS开发。我找到的一本书的描述中有 用于使用C#和.NET构建本机Android、iOS和Windows Phone应用程序 这把我的计划完全推迟了。我认为native是非托管代码的同义词,但它怎么能使用.NET呢 毫无疑问,我对这些术语的理解是有缺陷的,因此在澄清时,您能否尽量简单,以考虑到知识的缺乏。最后,应用程序必须使用本机代码运行。NET将其API和垃圾收集置于本机API之上,并充当应用程序和本机API之间的中间层 但在这样做时,它可能只支持自己的API子集

我想开始学习Xamarin和IOS开发。我找到的一本书的描述中有

用于使用C#和.NET构建本机Android、iOS和Windows Phone应用程序

这把我的计划完全推迟了。我认为native是非托管代码的同义词,但它怎么能使用.NET呢


毫无疑问,我对这些术语的理解是有缺陷的,因此在澄清时,您能否尽量简单,以考虑到知识的缺乏。

最后,应用程序必须使用本机代码运行。NET将其API和垃圾收集置于本机API之上,并充当应用程序和本机API之间的中间层

但在这样做时,它可能只支持自己的API子集(能够p调用不受支持的API),或者也支持所有本机API。Xamarin支持所有现成的本机API。这就是为什么它被称为“本地”


第二件事是,应用程序代码可以动态转换为本机代码,也可以进行预编译。Microsoft还在UWP()中将此预编译代码称为.NET本机代码,可以将其与Xamarin的功能进行比较。

.NET总是在iOS上编译为本机代码,因为不允许JIT。这也可以在Android上实现。@SamiKuhmonen什么是JIT,为什么不允许JIT?更具体地说,运行时代码生成是不允许的,因为苹果。JIT在需要时将字节码编译到本机运行时。@AlessandroFarace JIT=即时编译,与AOT=提前编译相反。第一个是由解释器运行的代码,第二个是machinecode。@在CPU计算该代码之前,必须将alessandrofarace计算机内存标记为可执行。这是一项安全措施。如果运行时将指令动态编译为本机代码,则运行时无法将内存声明为可执行文件。只有内核可以做到这一点,而且没有开放系统函数可以做到这一点。这就是为什么iOS上不允许JIT的真正原因。只是澄清一下,.NET native和Xamarin都是预编译的?是的,应该是这样。