我来优化我的 Flash 应用程序。
只是一个简单的问题, null 和 dispose 有什么不同?
什么情况下使用哪个?
非常感谢您的任何建议。
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;
}
设置为 null 更安全,因为它允许 GC 仅在对象从任何地方变为未引用后才收集该对象。例如,如果您 dispose() 仍然引用的 BitmapData,您将收到异常。如果您绝对确定某个对象没有从任何地方引用,例如,如果所讨论的 BitmapData 是临时的,并且只有一个引用,您可以使用 dispose() 来释放内存。在快速分配/释放临时对象的情况下,最好的解决方案是为它们保留内存并在需要时实际重用它们。