AS3.0中的ApplicationDomain

来源:互联网 发布:女网络歌手2016 编辑:程序博客网 时间:2024/05/18 03:11
终于消除了长久以来对ApplicationDomain的误解,原来一直以为这是一个和安全沙箱有关内容,看来我真的错了。在flash_as3_programming中有详细的解释。
应用程序域有三种类型,系统域子域(新的应用程序域)、当前应用程序域、当前应用程序域的子域。他们的关系就像是这样。
ApplicationDomain
ApplicationDomain 类的用途是存储 ActionScript 3.0 定义表。SWF 文件中的所有代码被定义为存在于应用程序域中。 可以使用应用程序域划分位于同一个安全域中的类。这允许同一个类存在多个定义,并且还允许子级重用父级定义。
利用ApplicationDomain加载类定义的代码如下
1. var urlRequest:URLRequest new URLRequest(url);2. var loader:Loader new Loader();3. var context:LoaderContext new LoaderContext();4. //当前域5. context.applicationDomain ApplicationDomain.currentDomain;6. //新应用程序域7. //context.applicationDomain new ApplicationDomain();8. //当前域子域9. //context.applicationDomain new ApplicationDomain(ApplicationDomain.currentDomain);10. loader.load(urlRequest, context);
当加载完成后我们可以像这样来使用加载的类定义
1. //这里的ClassDefinitionName是我们在被加载的swf中的类定义的名称2. var AClass:Class loader.contentLoaderInfo.applicationDomain.getDefinition(ClassDefinitionName) as Class;3. new AClass();下面就说说这三个不同的域

1、当前域
ApplicationDomain 类的用途是存储 ActionScript 3.0 定义表,在当前域中加载类定义后,如果当前域中已经有了同名的类定义,那么新加载的类定义不会覆盖原来的(这一点要注意),原来没有的会添加到as3的定义表中。
这可让您将新的类定义添加到应用程序的当前一组类定义中。这可用于主应用程序的运行时共享库。加载的 SWF 被视为远程共享库 (RSL)。使用此方法可以在应用程序启动之前使用预加载器加载 RSL。
2、新应用程序域
在系统域中新建一个应用程序域,他和当前域是平级的。这样我们可以对相同名称的类,可以有两个完全不同的定义。
此方法的一个用处是使旧版应用程序能够动态加载相同应用程序的更新版本,而不会发生冲突。之所以不发生冲突,是因为尽管使用的是同样的类名称,但它们划分到不同的应用程序域中。
3、当前域子域
在当前域中新建一个子域。这里也有一个要注意的,就是当父级域中(也就是当前域)没有同名的定义时,子域中的类才会被定义。
此方法的一个用处可能是作为一个使用主应用程序的类型的多屏幕丰富 Internet 应用程序 (RIA) 模块,该模块作为主应用程序的子级加载。如果能够确保所有类始终更新为向后兼容,并且正在加载的应用程序始终比其加载的软件的版本新,则子级将使用父级版本。如果可以确保不继续拥有对子级 SWF 的引用,则拥有了新的应用程序域还使您能够卸载所有的类定义以便于垃圾回收。此方法使加载的模块可以共享加载者的 singleton 对象和静态类成员。
0 0
原创粉丝点击