ここ数日色々やってきましたが、
apeirophobia: Loader.removeChild、apeirophobia: 外部swfの削除はLoader.unloadは使わない方が良いんじゃないかという件
Loader.unloadの処理にミスがありました・・・。(恥ずかしい・・・)
apeirophobia: Loader.removeChildの方でテストしていたスクリプトで
となっている部分。これunloadでlodar.contentsが非表示になるのでうっかりしていたのですが、loader自体がremoveChildされていませんでした・・・orz。
ということで
としてもう一度検証してみました。
以下その結果。
最初:6275kb
2500回目:7172kb。
5000回目:10572kb。
7500回目:8217kb。
10000回目終了:9900kb。
うん。問題なくできました・・・。すんません。
一応検証に用いたソース
個人的に外部swfを一度removeChildして、再利用という使い方をしないのででさほどEvent.REMOVED_FROM_STAGEでも問題はないのだけど、もしremoveChildして再度addChildして利用する場合はEvent.REMOVED_FROM_STAGEだと駄目。Event.REMOVEDだとその辺うまく切り分けられるのかしらね??そこはまだ検証してないけど・・・。
もし再利用するのであればEvent.UNLOADで処理。で、そのネストしている子供たちに何かしら明示的なメソッドで自分を掃除させる感じかなあ?ちょっとそれは面倒だなあ・・・。Event.UNLOADってその子供にも継承されないのかしら?
「外部swfの削除はLoader.unloadは使わない方が良いんじゃないかという件に誤りがあった件」への3件の返信
ちょっと気になることが一つ。
Event.REMOVED_FROM_STAGE
をListenして自分の掃除をさせる場合
parent.removeChild(this);
をするとGCが発動しないような気がする。
子供に対して
removeChildもchild = null;
も適応しない方がきれいにメモリがクリアされるような傾向が見られるのだけど、なんつーかタイミング的にGCが作動してないだけなのか?の判断が付かないので確証が持てない・・・。
でも検証の傾向としてはそんな感じがするであります。
この前の、ガベージコレクションウォッチャーを実装してくださった方がいるみたいですー。
http://d.hatena.ne.jp/kkanda/20080406
これで大分、メモリリーク対策も立てやすくなりそうです。
おぉ、ありがとうございますーー。