すべてのオブジェクトは、参照関係により維持されます。この概念はJavaScriptと同じです。何か別のオブジェクトから参照されているオブジェクトは、その参照関係が途絶えるまで維持されます。
"//"から始まるオブジェクトツリーは、親のオブジェクトが子のオブジェクトを参照しており、頂点となる"//"オブジェクトはBiz/Browserランタイムが参照しているため維持されています。
オブジェクトツリーに属さないオブジェクトも、参照関係により維持されます。通常、オブジェクトツリーに属さないオブジェクトはCRSプログラムの変数として参照されており、その変数がスコープから失われるまでの間維持されます。
オブジェクトを削除するためには、すべての参照を切断する必要があります。
親子間の参照関係を切断するためには Deleteメソッドを使います。
例
//.Form1.Button1.Delete();
この例では、Form1とButton1の間の参照を切断します。
CRSプログラム変数による参照は、変数スコープの消失と同時に切断されるため、意識する必要はありません。以下の例で詳しく説明します。
例
Function OnTouch(e) { var csvobj = new CSVDocument; // 1 var session = getHttpSession(); // 2 csvobj.Load(session.Get("test.csv")); // 3 Form1.Spread1.Row << csvobj; }
1. 最初にCSVDocumentオブジェクトがのnewにより生成され、そのリファレンスがcsvobj変数に格納されます。
2. 次にgetHttpSession関数によりHttpSessionオブジェクトが戻され、そのリファレンスがsession変数に格納されます。
3. さらに、CSVDocument.Loadメソッドの引数として、HttpSession.Getメソッドが実行され、HttpResponseオブジェクトがLoadメソッドに渡されます。
以上によりここまでに、CSVDocument、HttpSession、HttpResponseに参照が行われました。これらオブジェクトの参照関係は次のようになります。
開放時の動作は以下のようになります。
1. CSVDocument.Loadメソッドの終了により、HttpResponseオブジェクトはどこからも参照されなくなり、削除されます。
2. OnTouchイベントハンドラの終了によりスコープから外れるcsvobjとsession変数が消去されます。
3. csvobj変数により参照されていたCSVDocumentオブジェクトはどこからも参照されなくなり、削除されます。
4. session変数により参照されていたHttpSessionオブジェクトは、まだBiz/Browser自体により参照されているため、削除されることなく維持されます。