我读到在iOS上不可能发出IL代码,因此表达式已使用AOT选项进行了预编译,并且对无法进行AOT的Expression
进行了解释。我的问题是,为什么iOS允许解释但不允许运行时代码生成,除了性能之外,它是不是一样?为什么解释不是安全问题,而代码生成却是安全问题?
答案 0 :(得分:1)
顾名思义,解释器允许您在运行时解释应用程序的某些C#部分,并像往常一样提前编译其余部分。
在Xamarin.iOS中称为btouch的 Generator (生成器)获取这些定义文件,并使用.NET工具来compile them into a temporary assembly。但是,此临时程序集不可用于调用Objective-C代码。然后,生成器读取临时程序集并生成可在运行时使用的C#代码。
为什么解释不是安全问题,而代码生成却是安全问题?
这就是为什么,例如,如果您向定义.cs文件添加随机属性,则该属性不会显示在输出的代码中。生成器不知道它,因此btouch
不知道在临时程序集中寻找它来输出它。
参考链接:iOS App Architecture, Introducing the Xamarin.iOS Interpreter