2009-06-27 31 views
0

我有一個被稱爲多次的類。當應用程序進入下一個階段時,這些全部都必須卸載。因此,我在該類中創建了一個unload()方法。如何在ActionScript/Flex 3中取消設置(無符號)整數?

問題是,我似乎無法將我的uint變量「charId」設置爲null以便「取消」它。 「刪除」命令是不可能的,因爲它只適用於動態變量或類似的東西。

現在我想知道,我該如何解除這個變量,所以它的內存將在以後重新分配?

類的卸載方法:

public function unload():void 
     { 
      trace("Unloading character with charname '" + charName + "'."); 
      enterButton.removeEventListener(MouseEvent.CLICK, enterClicked); 
      removeChild(enterButton); 
      enterButton = null; 
      charName = null; 
      charId = null; //this is possible but not recommended - what's a better way? 
      lobbyInterface = null; 
     } 

所以,是的,它實際上可能,因爲它改變了變量的類型 - 然而這不是推薦,提高了警告。那麼,有什麼更好的方法來做到這一點?

請注意,該對象也在其父項中卸載。這是否也從內存中釋放所有這些變量?

回答

1

uint,int,NumberBoolean在AS3中是不可空的。數量可以是NaN,但這是真正的最好的,你可以得到。 intuint總是隻有32位,所以你不能在那裏填入一個空引用。

由於AS3具有密封類的概念,因此無法完成要執行的清理類型。一個密封的類在內存中具有固定的大小。當涉及實例變量時,將其視爲C struct,您只能轉儲全部或全部。你可以在C中做任何事情,當然,它是內存中的一個固定塊,是每個變量一個參考的實體。

你想要做的只是動態變量,它們的維護方式不同。

您不需要進行這種清理,因爲Flash像現在的大多數運行時一樣具有垃圾回收功能。它還處理嵌套和循環引用,您必須確定的唯一一件事是,您刪除對該類的任何「外部」引用。通常不收集的東西是顯示列表上的對象,運行定時器和間隔以及I/O相關的東西。只要你有一個從那裏到你的對象的參考鏈,它不會被收集。

讓我們假設你有一個object A帶有一個事件處理程序,用於在某個列表上的某個對象上移動鼠標,引用object B。 B不會被收集,但只要沒有鏈接導致對象,它就會被收集(GC遲早會被收集,但是你使用的內存越多,它的工作就越多)。

+0

有沒有什麼方法可以讓我調試應用程序,並查看當時引用了哪些對象?通過這種方式,我可以看到它是否真的會被垃圾收集 – Tom 2009-06-27 15:19:02