1
下面的方法會被調用很多次。我擔心連續調用新的矩形會增加潛在的不必要的內存消耗,或者是用於生成上一個矩形的內存被釋放/覆蓋以容納另一個矩形,因爲它被分配給相同的實例變量?關於AS3中內存管理的快速提問
private function onDrag(evt:MouseEvent):void
{
this.startDrag(false, dragBounds());
}
private function dragBounds():Rectangle
{
var stagebounds = new Rectangle(0 - swatchRect.x, 0 - swatchRect.y, stage.stageWidth - swatchRect.width, stage.stageHeight - swatchRect.height);
return stagebounds;
}
謝謝你的迴應,泰勒。所以我現在明白,stopDrag()將從startDrag()中刪除引用。但是如果dragBounds()被多次調用但未被startDrag()調用呢?假定矩形是一個大型的內存佔用對象。我是否會讓它成爲實例變量,以便在創建一個像這樣的新類之前取消整個類的實例變量? - if(stageBounds){stageBounds = null}; stageBounds = new Rectangle(...); - – TheDarkIn1978 2010-04-09 03:44:15
如果忽略某個值,則不會將其從內存中釋放,只會刪除該引用,並可能使其可用於GC。只要所有參考資料都清理完畢,GC就會找到並刪除它。你不能強迫這發生。對於大對象,您可以重用它們,而不是創建新的對象。如果創建一個新版本的成本高於維護一個你知道你很快就會需要的版本,這可能是有益的。 – 2010-04-09 03:50:56