Что такое $ cinit и $ init в AVM2? - PullRequest
1 голос
/ 11 февраля 2010

ОБНОВЛЕНИЕ: Найдена некоторая хорошая информация о AVM2 . Я не смог провести с ним много времени, но он определенно охватывает $ init и $ cinit (а также $ iinit и многие другие). Я опубликую ответ на этот вопрос, если получу хороший ответ, прежде чем кто-то что-то поставит.


Сегодня я был вовлечен в длинную нить прыжков и ссылок, но до сих пор не совсем понимаю, что такое $ cinit и $ init.

Меня волнует, потому что сегодня я узнал, что $ cinit и $ init интерпретируются (FP, если я правильно понимаю), а все остальное компилируется.

Я думаю , что $ init ссылается на функцию-конструктор данного класса, а $ cinit ссылается на конструктор объекта, который создает класс. ... что-то в этом роде ...

Может кто-нибудь объяснить мне это или, по крайней мере, указать мне полезное направление?

Спасибо.

Ответы [ 2 ]

1 голос
/ 10 апреля 2013

Это старый вопрос, но, поскольку я знаю ответ, я выложу здесь.

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

Надеюсь, вам хватит деталей!

0 голосов
/ 10 декабря 2010

$cinit - создать все статические переменные, когда класс используется впервые.

...