[*1] EventDispatcherクラスにはEventDispatcher.removeEventListeners()メソッドがつぎのように定められています(ステートメント頭の番号は、ASファイルの行を示します。ただし、バージョンによって変わることがあります。以下同様)。
  
    | 
private var mEventListeners:Dictionary; 
public function removeEventListeners(type:String=null):void{  if (type)    delete mEventListeners[type];  else    mEventListeners = null;} | 
イベントリスナーは、イベントごとにDictionaryオブジェクト(mEventListeners)に納めて管理されています(第37行目)。EventDispatcher.removeEventListeners()メソッドは、渡された引数に応じてリスナー関数群(Functionベース型のVectorオブジェクト)をDictionaryオブジェクトから除きます(第76〜79行目)。
[*2] DisplayObjectクラスにはDisplayObject.dispose()メソッドが、つぎのように定められています。DisplayObjectクラスにremoveEventListeners()というメソッドは備わっていませんので、継承するEventDispatcherクラスのEventDispatcher.removeEventListeners()が呼出されます(第140行目)。
  
    | 
public class DisplayObject extends EventDispatcher{ 
  public function dispose():void  {    removeEventListeners();  } 
} | 
[*3] Thibault Imbert『Introducing Starling』p.28をご参照ください。Textureオブジェクトからデータを消すには、Texture.dispose()メソッドを呼出します(TextureAtlasオブジェクトの場合はTextureAtlas.dispose())。
[*4] DisplayObjectContainerクラスは、override属性キーワードによりDisplayObjectクラスのdispose()メソッドを再定義(オーバーライド)しています。メソッドは、表示リストとなるVectorオブジェクト(mChildren)から取出したすべての子インスタンスに対してdispose()メソッドを呼出し(第79〜82行目)、さらにスーパークラスのDisplayObject.dispose()メソッドの呼出しも行います(第84行目)。
  
    | 
public class DisplayObjectContainer extends DisplayObject{ 
  private var mChildren:Vector.<DisplayObject>; 
  public override function dispose():void  {    var numChildren:int = mChildren.length;        for (var i:int=0; i<numChildren; ++i)      mChildren[i].dispose();          super.dispose();  } 
} | 
なお、子がDisplayObjectContainerインスタンスの場合に呼出されるのは、DisplayObjectContainer.dispose()メソッドになります(第82行目)。ですから結果として、表示リストの階層のすべての子に対して、dispose()メソッドの呼出しが行われるのです。
[*5] DisplayObjectContainer.removeChildAt()メソッドは、第2引数(dispose)にtrueが与えられると、表示リスト(mChildren)から取出した子インスタンス(child)のdispose()メソッドを呼出します(第131行目)。
  
    | 
public function removeChildAt(index:int, dispose:Boolean=false):void{  if (index >= 0 && index < numChildren)  {    var child:DisplayObject = mChildren[index];    child.dispatchEvent(new Event(Event.REMOVED, true));    if (stage) child.dispatchEventOnChildren(new Event(Event.REMOVED_FROM_STAGE));    child.setParent(null);    mChildren.splice(index, 1);    if (dispose) child.dispose();  }  else  {    throw new RangeError("Invalid child index");  }} | 
DisplayObjectContainer.removeChild()は、引数に渡された子インスタンスのインデックスを調べたうえで、(インデックスが存在すれば)そのインデックスと自らが受取った第2引数をDisplayObjectContainer.removeChildAt()メソッドに渡して呼出します(第116〜117行目)。
  
    | 
public function removeChild(child:DisplayObject, dispose:Boolean=false):void{  var childIndex:int = getChildIndex(child);  if (childIndex != -1) removeChildAt(childIndex, dispose);} | 
DisplayObjectContainer.removeChildren()メソッドもDisplayObjectContainer.removeChild()と同じように、削除するインデックスの子インスタンスに対してDisplayObjectContainer.removeChildAt()メソッドを呼出しています(第146〜147行目)。
  
    | 
public function removeChildren(beginIndex:int=0, endIndex:int=-1, dispose:Boolean=false):void{  if (endIndex < 0 || endIndex >= numChildren)     endIndex = numChildren - 1;    for (var i:int=beginIndex; i<=endIndex; ++i)    removeChildAt(beginIndex, dispose);} |