更新:找到了一些关于AVM2的不错的信息。我没有花太多时间在它上,但它肯定涵盖了$init和$cinit (以及$iinit,以及许多其他事情)。在别人提出问题之前,如果我对这个问题有一个很好的理解,我就会给你一个答复。
今天被拖进了一长串的链接跳跃和谷歌搜索,但仍然不太了解什么是$cinit和$init。
我很在意,因为我今天学到了$cinit和$init是被解释的(如果我正确理解的话),而其他的都是编译的。
我认为$init引用给定类的构造函数,$cinit引用创建类的对象的构造函数。..。差不多吧..。
有人能让我直截了当,或者至少给我指明一个有帮助的方向?
谢谢。
发布于 2013-04-10 07:34:38
这是个老生常谈的问题,但由于我知道答案,我会在这里张贴。
$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;
}希望这对你来说足够详细了!
发布于 2010-12-10 03:18:25
$cinit是在首次使用该类时构造所有静态变量的。
https://stackoverflow.com/questions/2240502
复制相似问题