這是很長的 - 不知道是否有人會麻煩閱讀它(不知道我會不會),但一直在打我的頭反對這一天之內。無法刪除只有一系列對象中的第一個
我有一個問題,我創建的一系列對象中的第一個沒有被釋放。我從對象中刪除事件偵聽器,使用localconnection hack等,它可以立即釋放除第一個對象之外的任何對象。
這裏是背景:
我本來本申請這是由一個巨大的MX的主要MXML文件:純ActionScript 3.應用程序的腳本塊經由一個XML文件配置,其中的名稱在啓動時從html文件傳入。
我做的更改是允許隨後加載新的xml文件(並重新配置應用程序),當用戶單擊超鏈接到xml文件時。爲了實現這一點,我將整個上述代碼塊從mxml文件中取出,並將其放在自己的類中,放在.AS文件中。現在主要的MXML文件是荒唐的短 - 它是所有在MXML應用程序實例聲明這個新類:
initialize="{new Rad_XF(this);}"
這個新Rad_XF對象包含所有以前在MXML文件中找到的舊代碼。
現在,如果用戶單擊指向有效xml文件的鏈接,現有的Rad_XF對象會創建一個新的Rad_XF對象,並且新的Rad_XF對象在其初始化後將刪除舊對象。這可以刪除任何以前的Rad_XF對象 - 除了第一個(如上所述的初始化)之外。
這裏是Rad_XF代碼來創建一個新的Rad_XF對象,如果用戶點擊一個鏈接:
private function txt_linkHandler(e:TextEvent):void {
if (getExt(e.text).toUpperCase() == "XML")
new Rad_XF(parent_app,this,e.text);
else
navigateToURL(new URLRequest(e.text),"_self");
}
而且在Rad_XF代碼破壞以前Rad_XF對象:
if (rad_xf_prev) {
parent_app.removeChild(rad_xf_prev.CanvasSB);
parent_app.removeEventListener("enterFrame",rad_xf_prev.app_enterframe);
parent_app.removeEventListener("mouseFocusChange",rad_xf_prev.repeat_end);
parent_app.removeEventListener("activate",rad_xf_prev.app_activate_handlr);
parent_app.removeEventListener("deactivate",rad_xf_prev.app_activate_handlr);
parent_app.removeEventListener("mouseMove",rad_xf_prev.mouse_handlr);
parent_app.removeEventListener("click",rad_xf_prev.mouse_handlr);
parent_app.removeEventListener("doubleClick",rad_xf_prev.mouse_handlr);
rad_xf_prev = null;
try {
new LocalConnection().connect('foo');
new LocalConnection().connect('foo');
} catch (e:*) {}
}
有在第一個對象和所有後續對象之間根本沒有任何區別,無論是有意的還是可以辨別的,然而第一個對象將不會被刪除。 (我在System.TotalMemory調用中包含了上面的塊來確認這一點。)第一個對象在mxml文件中初始化,但我試圖將它移動到AS文件 - 沒有任何區別。
這裏是Rad_XF構造的前幾行:
public function Rad_XF(parent_app:Application, rad_xf_prev:Rad_XF=null, fnCFG:String = null):void {
this.parent_app = parent_app;
this.rad_xf_prev = rad_xf_prev;
parent_app是MXML應用程序。 rad_xf_prev是之前被刪除的rad_xf對象。
只是不知道是否有人會打擾讀這個,並有一些可行的想法。或者認爲寫這個過程可能會給我一些額外的想法,但事實並非如此。
(注:Rad_XF不會擴展現有的ActionScript或Flex類 - 它應該?)
我看過了,但沒有提供幫助。你在應用程序中使用過Flex Profiler嗎?你怎麼知道第一個對象從不刪除?爲什麼這很重要? – JeffryHouser 2010-09-23 00:31:22
每個對象都包含整個應用程序的所有數據 - 通常爲10-20兆字節。我無法訪問flex profiler。其他人也建議pblabs分析器,我也嘗試過但尚未運行。 – Mark 2010-09-23 01:01:14
剛剛得到了pblabs探查器的工作 - 只適用於FP 10顯然 – Mark 2010-09-23 01:39:51