Показать сообщение отдельно
Старый 23.02.2012, 00:21
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 6  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Цитата:
как только мы первый раз обращаемся к классу со статическими переменными - ВСЯ его статика сразу же инициализируется.
Да истинно так. Советую прочитать avm2 overview многие подобные вопросы отпадут. В частности то что вызывается при первой инициализации называется cinit и туда свалится весь код инициализации, кроме константных значений некоторых типов, они в структуре класса будут представлены в виде значений по умолчанию.
Причём cinit это обычный метод, туда можно код понаписать:
Код AS3:
class ManagerSkin {
 
private static var element:MovieClip = Skins.getElement();
trace("hello from cinit");
 
}
Чтобы это лучше понять можно взять что-нибудь из хороших тулзов для реверсинга и декомпильнуть свой проект. Например rabcdasm.

Добавлено через 36 минут
Цитата:
Инициализация статик классов непредсказуема.
Неправда. Очень даже предсказуемо. Инициализация произойдёт в момент первого обращения к типу, т.е. создания переменной, при получении getDefenitionByName и т.п.
Если мы создадим два класса сто статическими полями и кросс ссылками друг на друга то это упадёт в рантайме т.к. во втором сините мы попробуем получить другой тип который ещё не проинитился и вместо него получим null
__________________
:)