2012-03-29 27 views
0

ロードされた.swfファイルからライブラリクラスを取り出すこのクラスがあります。私は、クラスのインスタンスがガベージコレクションを取得していない私のアプリケーションのどこかでステージからクラスを削除するたびに気づいた。助言がありますか?外部からロードされたSWFアセットを収集するガベージブ

package com.fullclip.utils { 
import com.greensock.loading.LoaderMax; 
import com.greensock.loading.SWFLoader; 

import flash.display.DisplayObject; 

public class LibraryAssets { 

    public static function getAsset(id:String, librarySRC:String):DisplayObject  { 
     return getAssetFromLoader(id, LoaderMax.getLoader(librarySRC) as   SWFLoader); 
    } 

    public static function getAssetFromLoader(id:String, library:SWFLoader):DisplayObject { 
     try { 
      var AssetClass:Class = library.getClass(id); 
      return new AssetClass() as DisplayObject; 
     } 
     catch (error:Error) { 
      Console.log("Could not find library asset: " + id); 
      Console.warn(error, error.getStackTrace()); 
     } 
     return null; 
    } 


} 
} 

答えて

1

ないカスタムクラス/ libsには、アンロードを処理する方法や、彼らがアンロードするために提供するもののユーティリティが、私はどこかに、彼らはLoaderオブジェクトを使用して終了コードで確信して確認してください。その場合、unloadAndStop(true)を明示的に呼び出す必要があります。これはGCにヒントを与え、ロードされたswfを収集して処分できることを通知します。 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Loader.html#unloadAndStop()

+0

swfにはたくさんのアセットが含まれているため、スワップ全体をアンロードすることはできません。アセットを戻すためにリロードする必要があるからです。 – d4rklit3

+0

それでもまだ使用している場合は、GCがSWFをクリーンアップするとは限りません。 –

+0

この方法の限界であると思われます。利便性の代わりに、私はすべてのスプライトをビットマップに変換し、必要なときにいつでも使用するためにビットマップデータの静的バージョンを保持します。私がアニメーションを使ってMovieClipを持ってきなければならない場合、私はそれらを自分のswfとして持ち込むことができます。 – d4rklit3

関連する問題