我来优化我的Flash应用程序。
只是一个简单的问题,null和dispose有什么不同?
和什么情况一起使用?
非常感谢任何建议。
答案 0 :(得分:2)
null
和dispose()
之间的差异:
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()来释放内存。在快速分配/释放临时对象的情况下,最好的解决方案是为它们保留内存,并在需要时实际重用它们。