Просмотр полной версии : Статический класс и ApplicationDomain
bookworm
11.03.2013, 19:11
Подскажите пожалуйста, запутался...
Если я в родительской SWF подгружаю дочернюю SWF вызывая Loader.load(new URLRequest(url:String), null), то у меня SWF-ки будут в разных доменах?
И соответственно с разными наборами определений классов.
А как это влияет на статические члены классов? Т.е. обращение к ним из дочерней и родительской - различны?
Вроде бы, раз домены различны, то и классы могут быть описаны по-разному.
С другой стороны - вижу, что доступ одинаков (правда и класс со статикой тоже один и тот же в обоих SWF).
В документации не нашел ничего по этому поводу пока...
Добавлено через 17 часов 49 минут
Нашел. Тему можно похерить
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 (отдельный домен без родителя) - судя по мониторингу - нет! Почему же?! Отдельный же домен вообще.
http://www.flasher.ru/forum/showthread.php?t=184935
bookworm
12.03.2013, 19:43
Хм. Так вы там сравниваете варианты 1 и 3, которые у меня.
Почему у 3 не выгружается - вроде бы ясно.
Почему у 1 выгружается - тоже
Но почему у 2 - не выгружается?! Это же совсем изолированный вариант!
Добавлено через 35 секунд
Перечитаю еще раз, может я не понял...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.