码迷,mamicode.com
首页 > 移动开发 > 详细

Unity3D在iOS下为啥不能更新的资料收集

时间:2015-10-21 12:18:42      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:

  • 几个基本概念
    • Mono 是什么鬼?

Mono是一个.Net工具,包括c#编译器和共通语言执行平台,可运行在winodws linux mac unix各种平台,其虚拟机包含一个实时编译引擎, Unity3d就是用mono这个东西实现跨平台的估计

    • CIL(Common Intermediate Language通用中间语言)

CIL可以在任何支持CLI(Common Language Infrastructure,通用语言基础结构)的环境中运行,就像.NET是微软对这一标准的实现,Mono则是对CLI的又一实现。由于CIL能运行在所有支持CLI的环境中,例如刚刚提到的.NET运行时以及Mono运行时,也就是说和具体的平台或者CPU无关。这样就无需根据平台的不同而部署不同的内容了。

代码的编译分两个部分:

      1. 从代码本身到CIL的编译(其实之后CIL还会被编译成一种位元码,生成一个CLI assembly)
      2. 运行时从CIL(其实是CLI assembly,不过为了直观理解,不必纠结这种细节)到本地指令的即时编译(这就引出了为何U3D官方没有提供热更新的原因:在iOS平台中Mono无法使用JIT引擎,而是以Full AOT模式运行的,所以此处说的额即时编译不包括IOS
    • Mono的AOT?

Ahead of Time (AOT) 提前编译来减少JIT的工作量,(JIT: Just In Time Compile,即时编译器)但默认情况下AOT并不编译所有IL代码,而是在优化和JIT之间取得一个平衡。在iOS中,Mono是以Full AOT模式运行的,无法使用JIT引擎。iOS平台是禁用JIT引擎的,于是Mono在iOS上需要Full AOT编译和运行。即预先对程序集中的所有IL代码进行AOT编译生成一个本地代码映像,然后在运行时直接加载这个映像而不再使用JIT引擎。

    • 过程总结
 应该分3步:
1. c# --->  CIL
2. CIL ---> 位元码
3. 第三步有两种形式: 
  --->  JIT    位元码 给虚拟机执行
  ----> AOT  位元码 --->  不同平台原生代码 直接平台执行
而JIT这种方式是被iOS禁止的,只能用AOT模式在运行前先编译好(当然AOT编译阶段也是用到JIT的引擎)
基本是这样 
    • 反射

 

    • 反射跟Mono有啥关系?

猜测反射就是Mono使用JIT的主要技术

Unity3D在iOS下为啥不能更新的资料收集

标签:

原文地址:http://www.cnblogs.com/atenza/p/4897174.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!