我读过Xamarin的一篇文章,并且遇到了一个特定的计算机科学词:提前。 根据一些谷歌搜索结果,这个AOT不允许在运行时生成代码。 这是不是意味着,它不支持动态的东西?
我知道这个问题可能很愚蠢,我在IOS中有0个知识,希望能从这里得到一些答案。感谢
答案 0 :(得分:3)
首先,动态的定义是什么?对于一般公众来说,动态代码意味着应用程序可以在运行时更改功能。对于iOS平台,二进制文件已签名以防止恶意软件。 Apple不喜欢可以在运行时加载功能的应用程序。
ahead-of-time (AOT) compiler 与动态代码本身无关。这与 just-in-time compilation (JIT) 的中间语言有关。中间语言最大的例子是Java字节码;编译一次,随处运行。当Java应用程序正在执行时,编译的代码是JIT到本机机器代码。 AOT编译器只是提前完成,以节省时间。
对于iOS平台,Xcode将Objective-C编译为设备的本机二进制文件。
答案 1 :(得分:3)
另一种看待这种情况的方法是......
在.Net中,您可以使用Reflection.Emit命名空间在运行时生成和编译代码。
例如,您可以使用接受C#的文本框创建“IDE”。当您单击一个按钮时,.Net框架可以将C#编译为动态加载的自定义库或作为新进程启动的完全可执行文件。
当与System.Reflection命名空间的其余部分结合使用时,这非常强大。您可以在运行时检查对象,并根据您喜欢的任何条件编译自定义代码。
那就是说......在大多数情况下,问题通常都会超过好处。主要是,这是一个巨大的安全问题,尤其是在消费者设备上运行时。
有可能创建一个既没有接近恶意代码的应用程序,也没有苹果审核的应用程序,然后让应用程序从您的网络服务器下载代码,编译并执行它。这个新代码不会被审核......
在消费者应用中没有充分理由这样做。