本文摘自
Moock著的
<<action 权威指南>>中的高级主题,不敢独享,故手工录入上来供大家看看:)
影片剪辑在播放器中的实现是和对象分开的,虽然两者在actionscript中显得几乎是相同的.主要的差别在于它们被分配和解除分配的方式不同,正规对象采用的是引用计数和垃圾回收的方式,而影片剪辑的生命周期是由时间线控制的,或者由duplicateMovieClip()和removeMovieClip()函数来精确控制.
假如用x=new Array()来声明一个数组,然后设置x=null,ActionScript会马上探测出没有其他引用指向该Array对象(也就是没有指向它的变量),然后就会对它进行回收(也就是释放它所使用的内存空间).定期作记录和清扫的垃圾回收消除了包含循环
用的对象(也就是说,用这个高级技术来确保当两个无用的对象互相指向对方的时候将它们的空间释放掉).
影片剪辑的情况有所不同,它们依靠时间线上对象的放置而出现或者消失.假如它们是动态创建的(用duplicateMovieClip()创建),它们就只有当使用removeMovieClip()
的时候才会被除去.
指向对象的是指针(内存地址引用),引用追踪和垃圾回收保护用户不让引用和存储空间泄露.但是,指向影片剪辑的引用是"软"引用----这个引用其实包含的是一个绝对目标路径,假如你有一个影片剪辑foo,并设置x=foo(将X设置为指向FOO的引用),然后用removeMovieClip()来删除foo,并创建另外一个名叫foo的剪辑,引用x就又可用了(它会指向新的foo剪辑).
正规对象则不同----对象引用防止对象被首先删除.因此,假如影片剪辑是对象,只要变量x指向它,removeMovieClip()就不会从内存空间中删除对象,此外,假如你创建了第二个名为foo的影片剪辑,旧的foo和新的foo可以同时存在,虽然旧的foo不会再得到渲染.
因此,一个独特的movieclip类型是恰当的,因为它和object类型有这么大的差别.由于类似的原因, typeof操作符对函数会返回"function",虽然函数在很大程序上和对象类似.
Macromedia 公司,FLASH小组,主工程师---------Gary Grossman