PDA

Просмотр полной версии : Статический класс и ApplicationDomain


bookworm
11.03.2013, 19:11
Подскажите пожалуйста, запутался...
Если я в родительской SWF подгружаю дочернюю SWF вызывая Loader.load(new URLRequest(url:String), null), то у меня SWF-ки будут в разных доменах?
И соответственно с разными наборами определений классов.
А как это влияет на статические члены классов? Т.е. обращение к ним из дочерней и родительской - различны?
Вроде бы, раз домены различны, то и классы могут быть описаны по-разному.
С другой стороны - вижу, что доступ одинаков (правда и класс со статикой тоже один и тот же в обоих SWF).
В документации не нашел ничего по этому поводу пока...

Добавлено через 17 часов 49 минут
Нашел. Тему можно похерить

zuxul
12.03.2013, 13:07
http://help.adobe.com/ru_RU/as3/dev/WSd75bf4610ec9e22f43855da312214da1d8f-8000.html
Если загружать как Вы, все классы остаются в своем домене и это значит, что они никак не перемешиваются с SWF, которой вы загружаете. ("родительская" и "дочерняя" тут совсем не к месту).
Чтобы достать статические члены и функции, нужно будет поступать точно так же, как и не статическими классами. Т.е., сначала достать класс через getDefintionName() и потом обращаться как CLASS.staticFunction() или CLASS.staticMember

bookworm
12.03.2013, 14:07
Я ошибся, полагая, что Loader.load(new URLRequest(url:String), null) - это самостоятельные домены для каждой загруженной. На самом деле - так, но с учетом того, что родительский домен будет соответствовать домену родительской SWF.

Т.е. это тоже самое что
1. Loader.load(new URLRequest(url:String), new LoaderContext(false, new ApplicationDomain(ApplicationDomain.currentDomain)))
Это как раз тот случай, про который вы говорите. Дочерняя SWF получит доступ к классам родительской через getDefintionName(). А если я определяю класс и там и там, то будет использоваться родительский в дочерней SWF. Поэтому статика и работает.

А полностью самостоятельный домен для дочерней SWF - это:
2. Loader.load(new URLRequest(url:String), new LoaderContext(false, new ApplicationDomain()))
А вот тут через getDefintionName() не добраться.

Ну и соответственно в общий домен, это:

3. Loader.load(new URLRequest(url:String), new LoaderContext(false, ApplicationDomain.currentDomain))

Но странно! В случае 1 память освобождается от определений классов, а вот в случае 2 (отдельный домен без родителя) - судя по мониторингу - нет! Почему же?! Отдельный же домен вообще.

КорДум
12.03.2013, 14:09
http://www.flasher.ru/forum/showthread.php?t=184935

bookworm
12.03.2013, 19:43
Хм. Так вы там сравниваете варианты 1 и 3, которые у меня.
Почему у 3 не выгружается - вроде бы ясно.
Почему у 1 выгружается - тоже
Но почему у 2 - не выгружается?! Это же совсем изолированный вариант!

Добавлено через 35 секунд
Перечитаю еще раз, может я не понял...