AVM2中的$ cinit和$ init是什么?

时间:2010-02-10 21:31:47

标签: actionscript avm2

更新:找到一些nice info on AVM2。我没有花太多时间用它,但它肯定涵盖了$ init和$ cinit(以及$ iinit,还有很多其他东西)。如果我在其他人提出问题之前得到了很好的答案,我会发布对这个问题的回复。


今天已经进入了一个关于链接跳跃和谷歌搜索的长线程,但仍然没有太多掌握$ cinit和$ init的内容。

我关心因为我今天了解到$ cinit和$ init被解释(如果我理解的话,由FP解释),而其他一切都被编译。

认为 $ init引用给定类的构造函数,$ cinit引用创建类的对象的构造函数。 ......那样......

任何人都可以让我直截了当,或者至少指出我有用的方向吗?

感谢。

2 个答案:

答案 0 :(得分:1)

这是一个老问题,但我知道答案,我会在这里发布。

$cinit是在需要使用类之前调用​​的方法。它初始化所有静态成员并运行静态初始化程序中的任何代码。把它想象成类拥有的构造函数。例如,如果您在AS3中有以下类:

public class SomeClass extends Object {
   static private const SOME_STATIC_VAR = 4;
   ....
}

然后$cinit方法将在该类被使用或甚至被引用之前运行,并且它将初始化SOME_STATIC_VAR的内存并将其值设置为4.

$init是类实例初始值设定项。它基本上是类构造函数。例如:

public function SomeClass() {
  super();
  return;
}

希望你有足够的细节!

答案 1 :(得分:0)

$cinit是在第一次使用类时构造所有静态变量。