Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Чудеса асинхронного исполнения. (http://www.flasher.ru/forum/showthread.php?t=173074)

fish_r 23.12.2011 17:51

Т.е. несмотря на то, что init() не возвращает значение, и поэтому программе не нужно дожидаться результатов вызова, инициализация не закончится до тех пор пока не отработают все вызовы всех методов в инициализаторах всех нижележащих классах? Да. Это несколько меняет моё представление о последовательности работы приложения.

silin 23.12.2011 17:58

Код AS3:

package
{
        import flash.display.Sprite;
 
        public class Main extends Sprite
        {
                public var test:Test
 
                public function Main():void
                {
                        test = new Test(this);
                }
        }
}
 
////
class Test
{
        public function Test(owner:Main)
        {
                trace("owner.test : " + owner.test); // owner.test : null
        }
}

ну да уже выяснили, но пусть будет как минимальный пример сабжа

i.o. 23.12.2011 18:07

Цитата:

Т.е. несмотря на то, что init() не возвращает значение, и поэтому программе не нужно дожидаться результатов вызова, инициализация не закончится до тех пор пока не отработают все вызовы всех методов в инициализаторах всех нижележащих классах?
Да.
«Чудеса синхронного исполнения» было бы уместнее в названии, кстати.

gloomyBrain 23.12.2011 18:12

А хотите еще одну интересную штуку? =) Вот смотрите:
Код AS3:

package {
 
    public class Singleton {
 
        // вот так делается статический конструктор
        // он вызывается при первом обращении к классу
        {
            trace("static constructor, class is: ", Singleton); // все ок, класс есть
        }
 
        public static const instance = new Singleton(); // null в трейсе, объект создан
 
        public function Singleton() {
 
            trace(Singleton); // трейсим именно класс, а не экземпляр, получаем null
 
        }
 
    }
 
}

То есть алгоритм такой: сначала инициализируются статические поля класса, затем уже сам класс (статический конструктор), и только после этого все остальное. Adobe style. То есть статический конструктор (который по идее должен инициализировать сам класс) в итоге может выполниться после того, как создан первый экземпляр этого класса.
И мы получаем вот такую картину: сначала создаем объект несуществующего класса, потом этот класс инициализируем в рантайме, а потом, получается назначаем этот класс нужным объектам. Ну или я не знаю как еще это можно объяснить =)

(с) Smithy

i.o. 23.12.2011 18:25

глум, там что-то другое:
Код AS3:

package
{
        public class Singleton
        {
                {
                        trace("Singleton::{} -> Singleton: " + Singleton);
                        new Singleton(Singleton);
                }
 
                public static const instance : Singleton;
 
                public function Singleton(classRef:Class=null)
                {
                        trace("Singleton::ctor() -> Singleton: " + Singleton);
                        trace("Singleton::ctor() -> classRef: " + classRef);
                }
        }
}

Цитата:

Singleton::{} -> Singleton: [class Singleton]
Singleton::ctor() -> Singleton: null
Singleton::ctor() -> classRef: [class Singleton]

expl 24.12.2011 17:25

Цитата:

Цитата:
Сообщение от fish_r Посмотреть сообщение
1. Вьюер инициализирует контролл, сохраняет на него ссылку.
Опа! Почему входной точкой является view, а не controller?
Опа! У флешеров оказывается где-то есть набор правил (кто кого должен инициализировать), выгравированных на скрижалях, которые ни в коем разе нельзя нарушать

dimarik 25.12.2011 00:26

Цитата:

Вьюер инициализирует контролл
Контролл — это какой-то специфичный вьювер, вроде button, checkbox и прочее подобное из разряда UI Controls?

fish_r 25.12.2011 02:49

Цитата:

Сообщение от dimarik (Сообщение 1053496)
Контролл — это какой-то специфичный вьювер, вроде button, checkbox и прочее подобное из разряда UI Controls?

Нет, конечно. Но, просто, пока не придумал для себя лучшего варианта инициализации триады, и этот не камильфо, согласен.


Часовой пояс GMT +4, время: 09:02.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.