设置为null和.dispose()之间的As3不同

时间:2012-09-12 04:54:44

标签: actionscript-3

我来优化我的Flash应用程序。

只是一个简单的问题,null和dispose有什么不同?

和什么情况一起使用?

非常感谢任何建议。

2 个答案:

答案 0 :(得分:2)

nulldispose()之间的差异:

null消除了对占用内存的对象的一个​​引用。

dispose()调用可执行各种操作的代码,但通常用于设置一个或多个null的内部引用。

我已经习惯于向任何对象添加公共dispose()调用,该对象创建,拥有或管理占用内存的另一个对象,并且可能需要在将来的某个时刻进行垃圾回收。实际上,我创建了一个名为IDisposable的接口,它确保我不会忘记添加必要的调用:

interface IDisposable
{
    function get isDisposed():Boolean;
    function dispose():void;
}

稍后,在任何实现接口的对象中......

private var _isDisposed:Boolean = false;
public function get isDisposed():Boolean
{
    return _isDisposed;
}

public function dispose():void
{
    if( isDisposed )  return;
    //  TODO: Call dispose() on any owned objects
    //  and set all complex objects to null.
    _isDisposed = true;
}

答案 1 :(得分:1)

设置为null更安全,因为它允许GC仅在从任何地方取消引用后才收集对象。例如,如果您处理()仍然引用的BitmapData,您将收到异常。如果您完全确定某个对象不是从任何地方引用的,例如,如果所讨论的BitmapData是临时的,并且只有一个对它的引用,则可以使用dispose()来释放内存。在快速分配/释放临时对象的情况下,最好的解决方案是为它们保留内存,并在需要时实际重用它们。