对于一个大型应用程序,资源和代码不可能全部包含在一个 swf 文件中。资源可以分布到不同的位置,
就像组建网站一样。网站是依靠网页组建成整个网站的框架,每个网页通过标签载入外部文件,在页面中
标签可以载入外部内容,也可以通过标签把部分内容写在网页中,例如 js 代码和 xml 文件。as3 应用程
序的组织与网站类似,但组织资源结构的不是标签,而是 Loader 加载器。
组织整个 as3 应用程序的类主要有 Loader 类、LoaderInfo 类、LoaderContex 类、
ApplicationDomain 和 SecurityDomain 类,其中最核心的类是 Loader 类。
Loader 类的特点
Loader 可以载入外部图片和 swf,当加载图片时,Loader 是一个纯粹的图像资源加载器,与加载
声音和视频没有什么不同。但是一旦加载 swf,情况就完全不同。swf 中不但包括资源,还有代码,加载 swf
时 Loader 的侧重点不在于加载资源,而在于分割应用程序,Loader 成为应用程序和模块之间的连接器,
是 swf 文件之间的纽带,在 swf 文件中也可以使用 Loader 载入另外 swf 的,因此应用程序分割方式是
有层次的,这种层级关系可以有效的划分应用程序资源和模块,Loader 承载如此重要功能,为此 as3 对
Loader 进行了精心的设计:
1. 轻量级
Loader 直接继承于 DisplayObjectContainer,增加的成员只有 7 个,保证在复杂的应用程序中
不会因为大量的 Loader 导致体积迅速膨胀。
2. 功能单一
由于设计目的明确,虽然是容器,但只能放入一个显示子对象,再次表明只用于加载,不做普通容器
使用,尝试增删子对象的代码会引发错误。
3. 运行稳定。
即使加载复杂的 swf 也能保证正常运行。每个 swf 的 root 属性引用自身的文档类对象,避免载入
后导致路径错误。
4. 加载机制成熟。
Loader 使用 LoaderInfo 作为加载信息对象,加载信息被加载器和加载内容共享,可控制性强。
Loader 使用安全域和应用程序域对加载代码进行管理,满足不同的需求。
加载过程
一个正常的资源加载过程如下:
资源加载过程与数据加载过程很相似,但最大的区别是在信息对象的事件中处理数据而不是在加载器
事件中处理数据,这是初学者最容易犯错地方。所有的加载事件都定义在 LoadrInfo 对象中,Loader
本身没有定义加载事件,这是需求所致,因为 LoaderInfo 对象被加载器和被加载的内容共享,两方面都
要了解加载状态和加载信息。对于加载器,LoaderInfo 对象是 Loader 的 contentLoaderInfo 属性,
对于被加载的 swf 而言,LoaderInfo 是文档类的 loaderInfo 属性,如下图: