[AS](MCの)参照渡しと、配列への格納への違い
メモリ管理でつまづいている、ちょっと挙動がわからない。
やりたいことはこんな感じ。
var mc0:MovieClip = new MovieClip(); addChild(mc0); var array:Array = [] array.push(mc0); var mc1 = array[0] //↓で表示リストから消えるのは無問題 removeChild(mc1); //↓だとmc0分のメモリは消えないっぽい。 mc1=null; //↓だとmc0分のメモリは消えるっぽい。 array[0] = null;
参照先を操作すれば、表示リストからは消せる。
でも、メモリを開放できないのがなんだか気持ち悪い。
参照で渡した場合、参照先をnullにしても、参照元はnullにならないってこと?
配列に格納するのも参照渡しと同じ感覚だと思っていたけど、違うってこと?
このあたりは今度えらい先生と会う機会があるときに教えてもらおう・・・
[追記]
コメントにて教えて頂きました。
参照で渡した場合、参照先をnullにしても、参照元はnullにならない、でOK。
参照先との関係が切れるだけ、ということだそうです。
Tweet
3 Comments
>>参照で渡した場合、参照先をnullにしても、参照元はnullにならないってこと?
その通りです。変数mc1はただの参照でしかありません。mc1=array[0]なので、あたかもarray[0]自体を消しているように思えるかも知れませんが、mc1はarray[0]の実体ではなく参照でしかないのです。よって、変数mc1をnullにしたところで、mc1の参照が切れるだけです。
>通りすがりのでべろっぱさん
ご教授ありがとうございます!
「参照が切れる」ということなのですね、納得しました!