不要になったオブジェクトへの参照が残っていると、そのオブジェクトの使用しているメモリを開放することができません。特に複数の参照を持つオブジェクトに対しては、参照の消し忘れによるメモリリークが発生しないよう注意が必要です。 イベントリスナを登録すると、イベントのターゲットになるオブジェクトとイベントリスナを持つオブジェクトの間で参照ができます。AS3 では下のような記述になります。 eventTarget.addEventLisener("type", eventHandler); このコードを実行すると eventTarget と this の間に参照がつくられます。(eventHandler は this オブジェクトのメソッド) ところが、これは明示的な参照の追加ではありません。そのため、参照の削除が必要な場合でも見落としてしまいそうですよね。 というわけで、今回はイベントリスナ追加
ActionScript3.0で不要になったインスタンスを削除しメモリを解放する「Cleaner」クラスを作成しました。 指定したオブジェクトの子を、任意の数まで削除します。新しい子から順番に削除するか、古い子から順番に削除するかの指定と、最後にオブジェクトへ nullを代入してメモリを解放するかの指定ができます。 サンプルでは、オブジェクトへ子を追加した後と削除した後に、それぞれのオブジェクトが持つ子の数を出力しています。 下記のボタンより、サンプルおよびソースのダウンロードができます。 【使用例】 _container(DisplayObjectContainer)の子を、古いものから順番に全て削除する Cleaner.deleteContainer(_container); _mc(MovieClip)の子を、古いものから順番に全て削除し、最後に nullを代入する Cleaner.
こんにちは、新米FDのkoyuです。 今回のエントリーは世知辛い社会から魂の解放、いや、パンパンになったメモリの解放についてです。 ActionScript3.0でスライドショーなど動的に画像をロードするようなコンテンツを作成する場合に画像をロードし、removeChildしますよね? しかし、画像に対しての参照が残っていた場合に、読み込んだLoaderやDisplayObjectをremoveChildをしただけではメモリが解放されず、ガンガン膨らんできます。 その様はまるで我が国の国債の発行残高のようです。結果として挙動が悪くなったり、ブラウザが落ちたりします。 では、参照が残るとはどういうことでしょうか? 例として挙げられるのは ・addEventListenerをしている場合 ・変数に代入している場合 などです。 かく言う、私はハマってしまいして、その経験から本エントリーを書いた次
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く