オブジェクトの削除¶
すべてのオブジェクトは、参照関係により維持されます。この概念は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;
}
- 最初にCSVDocumentオブジェクトがnewにより生成され、そのリファレンスがcsvobj変数に格納されます。
- 次にHttpSession.getSessionメソッドによりHttpSessionオブジェクトが戻され、そのリファレンスがsession変数に格納されます。
- さらに、CsvDocument.loadメソッドの引数として、HttpSession.Getメソッドが実行され、HttpResponseオブジェクトがloadメソッドに渡されます。
以上によりここまでに、CsvDocument、HttpSession、HttpResponseに参照が行われました。これらオブジェクトの参照関係は次のようになります。
開放時の動作は以下のようになります。
- CSVDocument.Loadメソッドの終了により、HttpResponseオブジェクトはどこからも参照されなくなり、削除されます。
- OnTouchイベントハンドラの終了によりスコープから外れるcsvobjとsession変数が消去されます。
- csvobj変数により参照されていたCsvDocumentオブジェクトはどこからも参照されなくなり、削除されます。
- session変数により参照されていたHttpSessionオブジェクトは、まだBiz/Browser自体により参照されているため、削除されることなく維持されます。