Что такое $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
состоит в том, чтобы создать все статические переменные, когда класс используется впервые.