flashAS3怎么让加载的外部SWF文件卸载干净
1个回答
展开全部
要彻底地移除一个外部swf,就是要想办法彻底清除掉所有对于它的引用并停止它的播放。
首先你要移除掉外部swf的所有事件侦听。由你内部添加的事件侦听,就在内部移除;而这个外部swf本身的事件侦听,应该由外部swf提供一个移除自身事件侦听的公开方法,你从内部调用这个方法就行了。否则它的引用将会保存在 event.target 里面。
其次你要销毁所有对这个swf的全局引用(非全局引用可以不管):比如你用了某个全局变量来记录这个swf,记住要把这个变量设为 null;如果你用某个全局数组保存了这个swf,也记得把它清除出数组。如果你把swf保存在某个全局对象的属性里面,如 private var obj:Object = new Object; obj.swf = swf,也要把obj.swf 设为null;
还有你要清除掉所有对该swf内部的影片剪辑的全局引用。比如你创建了一个全局变量记录了swf下的mc : private var _mc1 = swf.mc1 的话,_mc1.parent 就是对swf的引用。同理, private var _mc2 = swf.mc1.mc2 的话,_mc2.parent.parent也是对swf的引用。_mc1和_mc2要设为null
最后你要让你内部用于加载swf的Loader对象执行 unloadAndStop() 让这个swf文件停止并卸载。
总之彻底移除一个swf是需要很仔细的,但是也是绝对有意义的,它可以最大地优化你Flash运行时的CPU占用率。
首先你要移除掉外部swf的所有事件侦听。由你内部添加的事件侦听,就在内部移除;而这个外部swf本身的事件侦听,应该由外部swf提供一个移除自身事件侦听的公开方法,你从内部调用这个方法就行了。否则它的引用将会保存在 event.target 里面。
其次你要销毁所有对这个swf的全局引用(非全局引用可以不管):比如你用了某个全局变量来记录这个swf,记住要把这个变量设为 null;如果你用某个全局数组保存了这个swf,也记得把它清除出数组。如果你把swf保存在某个全局对象的属性里面,如 private var obj:Object = new Object; obj.swf = swf,也要把obj.swf 设为null;
还有你要清除掉所有对该swf内部的影片剪辑的全局引用。比如你创建了一个全局变量记录了swf下的mc : private var _mc1 = swf.mc1 的话,_mc1.parent 就是对swf的引用。同理, private var _mc2 = swf.mc1.mc2 的话,_mc2.parent.parent也是对swf的引用。_mc1和_mc2要设为null
最后你要让你内部用于加载swf的Loader对象执行 unloadAndStop() 让这个swf文件停止并卸载。
总之彻底移除一个swf是需要很仔细的,但是也是绝对有意义的,它可以最大地优化你Flash运行时的CPU占用率。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询