Что такое $cinit и $init в AVM2?

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


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

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

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

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

Благодарю.

2 ответа

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

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

Надеюсь, это достаточно подробно для вас!

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

Другие вопросы по тегам