オブジェクトの削除

すべてのオブジェクトは、参照関係により維持されます。この概念はJavaScriptと同じです。
何か別のオブジェクトから参照されているオブジェクトは、その参照関係が途絶えるまで維持されます。
"//"から始まるオブジェクトツリーは、親のオブジェクトが子のオブジェクトを参照しており、頂点となる"//"オブジェクトはBiz/Browserランタイムが参照しているため維持されています。
オブジェクトツリーに属さないオブジェクトも、参照関係により維持されます。
通常、オブジェクトツリーに属さないオブジェクトはCRSプログラムの変数として参照されており、その変数がスコープから失われるまでの間維持されます。

削除方法

オブジェクトを削除するためには、すべての参照を切断する必要があります。

親子間の参照関係を切断するためにはDeleteメソッドを使います。


//.Form1.Button1.delete();

この例では、Form1とButton1の間の参照を切断します。


CRSプログラム変数による参照は、変数スコープの消失と同時に切断されるため、意識する必要はありません。以下の例で詳しく説明します。


function onTouch(e) {
    var csvobj = new CsvDocument;            // 1
    var session = HttpSession.getSession();  // 2
    csvobj.Load(session.get("test.csv"));    // 3
    Form1.FlexView1 << csvobj;
}
  1. 最初にCSVDocumentオブジェクトがnewにより生成され、そのリファレンスがcsvobj変数に格納されます。
  2. 次にHttpSession.getSessionメソッドによりHttpSessionオブジェクトが戻され、そのリファレンスがsession変数に格納されます。
  3. さらに、CsvDocument.loadメソッドの引数として、HttpSession.Getメソッドが実行され、HttpResponseオブジェクトがloadメソッドに渡されます。

以上によりここまでに、CsvDocument、HttpSession、HttpResponseに参照が行われました。これらオブジェクトの参照関係は次のようになります。

../../_images/object03_image001.gif

開放時の動作は以下のようになります。

  1. CSVDocument.Loadメソッドの終了により、HttpResponseオブジェクトはどこからも参照されなくなり、削除されます。
  2. OnTouchイベントハンドラの終了によりスコープから外れるcsvobjとsession変数が消去されます。
  3. csvobj変数により参照されていたCsvDocumentオブジェクトはどこからも参照されなくなり、削除されます。
  4. session変数により参照されていたHttpSessionオブジェクトは、まだBiz/Browser自体により参照されているため、削除されることなく維持されます。