AS3 ApplicationDomain

ApplicationDomain为AS3的应用程序域。它和安全域(沙箱)还是有区别的。

应用程序域有三种类型:系统域子域(新的应用程序域)、当前应用程序域、当前应用程序域的子域。他们的关系就像是这样:

详解:

ApplicationDomain 类的用途是存储 ActionScript 3.0 定义表。SWF 文件中的所有代码被定义为存在于应用程序域中。 可以使用应用程序域划分位于同一个安全域中的类。这允许同一个类存在多个定义,并且还允许子级重用父级定义。

利用ApplicationDomain加载类定义的代码如下

var urlRequest:URLRequest = new URLRequest(url);
var loader:Loader = new Loader();
var context:LoaderContext = new LoaderContext();
//当前域
context.applicationDomain = ApplicationDomain.currentDomain;
//新应用程序域
//context.applicationDomain = new ApplicationDomain();
//当前域子域
//context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
loader.load(urlRequest, context);

下面来说说具体的三个域:

1、当前域
在当前域中加载类定义后,如果当前域中已经有了同名的类定义,那么新加载的类定义不会覆盖原来的(注意!important),原来没有的会添加到as3的定义表中。

2、新应用程序域
(在系统域中新建一个应用程序域,他和当前域是平级的:上面的图中已经有明确的表达)这样我们可以对相同名称的类,可以有两个完全不同的定义。
此方法的一个用处是使旧版应用程序能够动态加载相同应用程序的更新版本,而不会发生冲突。之所以不发生冲突,是因为尽管使用的是同样的类名称,但它们划分到不同的应用程序域中。

3、当前域子域
在当前域中新建一个子域。这里也有一个要注意的,就是当父级域中(也就是当前域)没有同名的定义时,子域中的类才会被定义。
如果能够确保所有类始终更新为向后兼容,并且正在加载的应用程序始终比其加载的软件的版本新,则子级将使用父级版本(旧版本)。如果可以确保不继续拥有对子级 SWF 的引用,则拥有了新的应用程序域还使您能够卸载所有的类定义以便于垃圾回收。此方法使加载的模块可以共享加载者的 singleton 对象和静态类成员。

获取特定的应用程序域:

Loader.contentLoaderInfo.applicationDomain
时间: 2024-10-17 10:14:44

AS3 ApplicationDomain的相关文章

as3.0中通过ApplicationDomain类获得被加载swf

as3.0中通过ApplicationDomain类获得被加载swf(转载) 首先先回顾一下FLASH的OO构成.对于FLASH,我们可以把任何的可视化元件都看成某个类文件的具体实例,包括swf文件.我们可以把swf文件看成一个类的具体实例,而它里面拥有个个其他类的实例对象,例如:我们新建一个loaded.fla文件,然后我们建立一个影片剪辑元件,你可以在它的内部做一些动画处理,打开库,单击元件右建,选择“链接”打开“链接属性”,在类的输入框里我们键入“myClass”. 这样一来我们就可以把这

[ActionScript 3.0] AS3.0 Loader加载子swf时是否需要指定新的应用程序域ApplicationDomain

实际应用中, Loader加载子swf时是否需要指定新的应用程序域ApplicationDomain,需要择情况而定. 1.当加载的子swf中有流存在时,比如视频或者声音,则最好需要指定新的应用程序域ApplicationDomain,如果没有指定,调用_ldr.unloadAndStop();时无法将子swf中的流从内存中卸载掉,了解原因,请深入了解应用程序域ApplicationDomain,代码如下: var ldr:Loader = new Loader(); var context:L

AS3加载操作swf

随着程序越来越大,我们需要把它拆分成多个swf,在需要的时候动态加载.拆分时应该尽量把不同的类编译进唯一的swf,避免因swf文件增多而使整个程序的文件尺寸增大.按此原则可以拆分出以下两种swf,借助 ApplicationDomain 共享其代码和资源. * 模块(Module)       按照程序逻辑,可以拆分出多个“功能模块”,如“注册”.“管理”等等:按照游戏或社区类程序的关卡或场景,可以拆分出不同的“场景模块”.这些模块不是主程序运行必须的,只在需要的时候加载.     * 运行时共

[转]AS3复制可视对象

一,复制舞台上的影片剪 方法1——反射方法: var ClassRef:Class = getDefinitionByName(getQualifiedClassName(t_mc)) as Class; var clone_mc:DisplayObject = new ClassRef(); addChild(clone_mc); 方法2——构造器方法: var ClassRef:Class = t_mc.constructor; var clone_mc:MovieClip = new Cl

as3.0 TextField中单行文字内容垂直居中

在开头,先首说一下TextField中单行文字空间是怎样的.图如下 从图中可以看到,当为文字设定像素大小时,我们都可以从TextField中的文字空间信息取得两个信息Ascent与Descent,文字空间与边距的2px一般是固定的.所以如果我们想在TextField中单行文字垂直居中的话,可以这样设定TextField的高度为Ascent+Descent+4px.具体在as3.0中的个人实现代码实例如下: package { import fl.controls.Label; import fl

[转]Flash、Flex、AS3.0框架及类库资源收集之十全大补

原文地址:http://www.d5power.com/portal.php?mod=view&aid=27 APIs.Libs.Components1.as3ebaylibhttp://code.google.com/p/as3ebaylib/2.as3youtubelibhttp://code.google.com/p/as3youtubelib/3.as3flickrlibhttp://code.google.com/p/as3flickrlib/4.Yahoo ASTRA Flash C

AS3操作XML文件

好久没有写AS3程序了...马丹连个xml读取都不会了快.. 下面是一个很好的例子,自己使用Flex biulder刚写的: 代码如下: package { import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; public class TestXml extends Sprite { private var lod:URLL

转载:Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式

Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式 出自:http://www.cnblogs.com/top5/archive/2012/08/04/2623464.html 关于AS3加载图片等外部资源,我常用的有两种方式:Loader和Embed,各自的特点,总结如下: Embed:在Flash编译阶段就将资源嵌入,也就是说图片资源是会被编译进swf文件里面去的:这样子的好处是代码比较简洁,使用方便,也不存在加载顺序的问题,缺点是会增大swf文件的体积 Loader:在

学习AS3菜鸟起飞吧之—函数(四):形式参数和实际参数

函数的参数是外界与函数内部通信的方法,对于有参函数来说,函数调用时函数有数据传递的关系. 看代码: //调用函数max(5,7);//定义函数function max(x:int,y:int):int{     if(x > y)     {           x = x;      } else {              x = y;      }      return x;} 如果一个函数有返回值,可使用 return语句,并在定义函数时声明返回值的类型. 上面的代码在函数调用过程中