`

在AS3里..我们无法手动完全删除一个对象,,

 
阅读更多
在AS3里..我们无法手动完全删除一个对象,,
以MovieClip为例..
我们只有在删除它的时候
除了removeChild(对象)外
还必须清空它的子对象
删除所有动态添加的属性
删除所有侦听
删除所有引用
然后等待垃圾回收,

可是实际操作的时候..
在长长的代码当中..经常会忘记自己什么时候写了侦听..什么时候添加了动态属性

其实,,我们可以借用显示对象中的Event.REMOVED,在删除对象的时候,让对象自己调用删除函数,删除相关的东西

下面这个类继承了MovieClip,当他的实例在removeChild的时候,对象将"自我毁灭" <视频教程'>css.shtml' target='_blank' title = 'div视频教程'>div class="code">package net.L4cd.display{
  import flash.display.MovieClip;
  import flash.events.Event;
  dynamic public class iMovieClip extends MovieClip{
    private var lis:Array;//定义一数组保存侦听
    public function iMovieClip(){
      lis = new Array()
      addEventListener(Event.REMOVED,remove)//侦听删除事件
    }
   
    //重写addEventListener,在增加侦听的时候..把相应的事件保存到数组
    override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{
      lis.push([type,listener,useCapture])
      super.addEventListener(type,listener,useCapture,priority,useWeakReference)
    }
   
    //"自我毁灭"的方法
    private function remove(e:Event):void{
      if(e.currentTarget != e.target)return
      stop()
      //删除子对象
      trace("删除前有子对象",numChildren)
      while(numChildren > 0){
        removeChildAt(0)
      }
      trace("删除后有子对象",numChildren)
     
      //删除动态属性
      for(var k:String in this){
        trace("删除属性",k)
        delete this[k]
      }
     
      //删除侦听
      for(var i:uint=0;i<lis.length;i++){
        trace("删除Listener",lis[i][0])
        removeEventListener(lis[i][0],lis[i][1],lis[i][2])
      }
      lis = null
    }
  }
}
然后我们另外新建一个flash,直接在时间轴上写下以下代码
import net.L4cd.display.iMovieClip;
var mc:MovieClip = new iMovieClip()
mc.addEventListener(Event.ADDED,aaaa)
mc.addEventListener(Event.ADDED_TO_STAGE,aaaa)
mc.addEventListener(Event.ENTER_FRAME,aaaa)
mc.addEventListener(MouseEvent.CLICK,aaaa)
mc.addEventListener(MouseEvent.MOUSE_DOWN,aaaa)
mc.a = "http://L4cd.Net"
mc.b = "我是动态属性2"
mc.name = "我是MC"
addChild(mc)
function aaaa(e:Event){
 
}
removeChild(mc)
mc = null
运行后.,,输出框就会出现
删除前有子对象 0
删除后有子对象 0
删除属性 b
删除属性 a
删除Listener removed
删除Listener added
删除Listener addedToStage
删除Listener enterFrame
删除Listener click
删除Listener mouseDown
这样,,,我们能做的事都已经做完了..等垃圾回收进行回收就ok了

上面的remove方法就是mc在移除的时候,对自己进行的清理,,
注意的是,以上只针对MovieClip进行的清理,每个类或你自定义的类都有不同..
如Sprite不需用要stop(),不需要删除动态属性..等等..
这个就由你自己去发挥~
写一组自己的"自我毁灭"类..

还有需要注意的是..像有时候,你只想removeChild,而不想进行删除,这样可以把上面的代码进行修改.
把remove设置为公开的方法
然后把addEventListener(Event.REMOVED,remove)去掉..
最后在你想删除对象的时候,,,再调用remove()就ok了..
分享到:
评论

相关推荐

    批量删除Excel表格中文本和控件对象.docx

    在日常工作中,我们经常需要处理大量的Excel文件,有时候这些文件中包含了许多不必要的文本或控件对象,例如文本框、形状、按钮等,这些对象可能会占用较大的文件空间或者影响到数据处理的效率。因此,学会如何批量...

    VMware_View问题汇总指南-201302

    8 6、为View Composer创建一个QuickPrep账户的步骤 ................................................... 8 7、登录到虚拟桌面时,提示“Login in as current user”选项失败 ......................................

    Excel-VBA宏编程实例源代码-随机删除应用对象设置.zip

    这个“Excel-VBA宏编程实例源代码-随机删除应用对象设置.zip”文件提供了一个具体的应用实例,主要涉及到如何使用VBA宏来实现随机删除应用对象,如工作表、图表或者其他自定义对象。以下将详细介绍这一知识点。 ...

    AS3 让一张图片变成火焰特效的代码

    在AS3中,我们可以创建一个自定义的粒子类,并在`FlameEffect`类中管理这些粒子。 ```actionscript class FlameParticle { // 定义粒子的属性,如位置、速度、颜色等 } // 在FlameEffect类中添加粒子生成和更新的...

    AS+3.0+学习文档精华版(二).rar

    3. **事件模型**:AS 3.0 提供了一个新的事件驱动模型,允许程序对用户交互或其他系统事件做出响应。事件监听器和事件对象是这个模型的核心组成部分。 4. **数据类型系统**:AS 3.0 强制类型,包括基本类型(如int...

    SqlMapClient对象.pdf

    `&lt;selectKey&gt;`标签允许我们执行一个SQL查询,如`SELECT @@IDENTITY AS ID`,该查询返回刚刚插入记录的自增ID。`keyProperty`属性指定的是User对象中的属性名(如`id`),在插入操作完成后,`insert`方法的返回值和...

    excel VBA 对象实例

    3. **单元格对象(Range)**:在工作表中,我们可以操作单个单元格或单元格范围。范围对象有值、公式、字体、边框等属性,以及清除、填充、查找等功能: ```vba Dim rng As Range Set rng = ws.Range("A1:C5") ' ...

    删除空行.zip

    在Python中,我们可以使用内置的`open()`函数打开文件,并使用`readlines()`方法读取文件内容为一个行列表。然后,我们可以通过遍历这个列表,检查每一行是否为空行,如果为空则忽略,否则保留。以下是一个基本的...

    如何用vb创建一个不能删除,重命名,移动的文件夹?

    通过上述步骤,你可以创建一个在普通用户权限下难以删除或重命名的文件夹。然而,完全防止管理员删除或重命名文件夹在大多数情况下是不现实的,因为管理员通常拥有对系统的最高控制权。在编写这类程序时,应确保符合...

    精彩编程与编程技巧-创建和删除快捷方式...

    在Visual Basic中,可以通过调用`OSfCreateShellLink`函数来创建一个快捷方式。这个函数定义在Vb5stkit.dll库中,并提供了详细的参数说明: ```vb Private Declare Function OSfCreateShellLink Lib "Vb5stkit.dll...

    Python库 | aws-cdk.aws-s3-notifications-1.24.0.tar.gz

    在IT行业中,Amazon Web Services (AWS) 提供了一系列强大的云服务,其中Amazon Simple Storage Service (S3) 是一个高度可扩展的对象存储服务。为了更好地管理和操作S3中的数据,开发人员常常需要利用各种工具来...

    手动添加图元到选择集_cadvba_

    在AutoCAD中,选择集是一个对象,它包含用户或程序选择的图形对象。你可以将它想象为一个临时存储选定图元的容器。通过编程,我们可以对选择集进行操作,如添加、删除图元,或者应用特定的属性修改。 要手动添加...

    怎么一次性删除PPT中所有动画效果?.docx

    手动删除每个幻灯片上的动画效果确实耗时,不过通过使用VBA(Visual Basic for Applications)编程,我们可以实现一键删除所有动画。以下是两种方法来一次性删除PPT中的所有动画效果。 ### 方法一:使用VBA宏 1. *...

    Excel-VBA宏编程实例源代码-自定义函数-删除员工档案表中全部超链接.zip

    这段代码首先定义了一个工作表对象`ws`和一个范围对象`rng`,然后遍历当前工作簿中的每一个工作表。`UsedRange`属性返回工作表中包含数据的单元格范围。接着,代码通过`For Each`循环遍历这个范围内所有的超链接,并...

    删除word中所有空行--宏

    - **初始化**:首先定义了一个变量`i`用于存储遍历到的每个段落对象,以及一个整型变量`n`用于统计删除的空行数。 - **禁用屏幕更新**:通过设置`Application.ScreenUpdating`属性为`False`来提高宏执行速度,避免...

    Excel-VBA宏编程实例源代码-删除命令行控制项.zip

    要删除一个命令行控制项,我们首先需要引用工作表对象和相应的控件对象。以下是一个简单的VBA代码示例,展示了如何删除一个名为"DeleteMe"的命令按钮: ```vba Sub DeleteButton() Dim ws As Worksheet Set ws = ...

    Excel-VBA宏编程实例源代码-打开“立即窗口”并删除模板中的代码段”.zip

    如果模块不存在,它会弹出一个信息框告知用户。 在实际应用中,可能需要根据具体需求调整代码,例如删除特定的子过程或函数,或者根据某种条件保留部分代码。了解这些基本操作后,你就可以更深入地探索VBA宏编程,...

    Excel-VBA宏编程实例源代码-删除相同路径下的文件夹.zip

    这个压缩包包含了一个名为"删除相同路径下的文件夹.xlsm"的文件,这实际上是一个启用宏的工作簿,用于执行自定义的VBA(Visual Basic for Applications)代码来实现特定功能。 VBA是Microsoft Office套件中内嵌的一...

    VBA删除数据保留公式

    在Excel VBA编程中,"VBA删除数据保留公式"是一个常见的需求,特别是在处理大量数据时,为了优化工作表或清理特定数据集,我们可能需要删除某些行或列,但同时要保持原位置的公式不被破坏。这个过程涉及到VBA...

Global site tag (gtag.js) - Google Analytics