1

更新:在 AVM2 上找到了一些不错的信息。我没能花太多时间在它上面,但它肯定涵盖了 $init 和 $cinit(以及 $iinit 和许多其他东西)。如果在其他人提出问题之前我能很好地掌握答案,我会发布对这个问题的回应。


今天陷入了关于这个问题的一长串链接跳跃和谷歌搜索,但仍然不太了解 $cinit 和 $init 是什么。

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

认为$init 是指给定类的构造函数,而 $cinit 是指创建该类的对象的构造函数。……类似的东西……

谁能让我明白这一点,或者至少为我指出一个有用的方向?

谢谢。

4

2 回答 2

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;
}

希望这对你来说足够详细!

于 2013-04-10T07:34:38.030 回答
0

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

于 2010-12-10T03:18:25.050 回答