【问题标题】:Removing Tween For Garbage Collection in AS3在 AS3 中为垃圾收集移除 Tween
【发布时间】:2010-03-01 07:58:29
【问题描述】:

我正在尝试在完成后删除 tween 对象,以便可以通过垃圾回收来释放内存。

在这个例子中,我将一个UILoader 对象传递给fadeIn 函数,该对象被转换为一个精灵,以便它在完成加载时淡入。当tween 完成动画时,我想删除tween 对象。我已将编译器错误包含为 cmets。

function fadeIn(e:Sprite):void
{
  var myTween:Tween = new Tween(e, "alpha", None.easeNone, 0.0, 1.0, 0.2, true);
  myTween.addEventListener(Event.COMPLETE, deallocateObject, false, 0, true);
}

function deallocateObject(e:Event):void
{
  //delete(e.currentTarget); //Warning: 3600: The declared property currentTarget cannot be deleted. To free associated memory, set its value to null.
  e.currentTarget = null; //1059:Property is read-only.
}

【问题讨论】:

    标签: actionscript-3 memory-management garbage-collection


    【解决方案1】:

    首先,您要使用 TweenEvent 来处理补间的完成。 Event 的 currentTarget 属性是只读的,因此您需要从事件中“获取”当前目标并将其转换为补间,然后删除您的事件并将其设置为 null:

    // assuming MC on stage with instance name "test"
    
    import fl.transitions.*;
    import fl.transitions.easing.*;
    
    function fadeIn(e:Sprite):void
    {
        var myTween:Tween = new Tween(e, "alpha", None.easeNone, 0.0, 1.0, 1, true);
        myTween.addEventListener(TweenEvent.MOTION_FINISH, deallocateObject, false, 0, true);
    }
    
    function deallocateObject(e:TweenEvent):void
    {
        var myTween:Tween = e.currentTarget as Tween;
        // -- I always remove even when using weak listeners
        myTween.removeEventListener(TweenEvent.MOTION_FINISH, deallocateObject);
        myTween = null;
    }
    
    fadeIn(test);
    

    在函数中使用本地 Tweens 时要小心。通常他们会在补间完成之前收集垃圾。如果发生这种情况,您必须将补间声明为类属性。我建议省去一些麻烦,并使用 Tweener、gTween 等。 Tween 类很烂

    【讨论】:

      【解决方案2】:
      function fadeIn(e:Sprite):void
      {
      var myTween:Tween = new Tween(e, "alpha", None.easeNone, 0.0, 1.0, 0.2, true);
      myTween.addEventListener(TweenEvent.MOTION_FINISH, deallocateObject);
      }
      
      function deallocateObject(e:Event):void
      {
      delete(e.currentTarget as Tween);
      }
      

      这行得通。

      【讨论】:

        猜你喜欢
        • 2010-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-21
        • 2018-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多