GUIのライフサイクル
通常,ライブのGUIObjectインスタンスは,ウィンドウや他のユーザインターフェースを閉じることと等価であるインターフェースウィジェットを閉じる正規のユーザアクションでシャットダウンされ処分される.アクティブなGUIObjectインスタンスにCloseGUIObjectを使って閉アクションを起すこともできる.
CloseGUIObjectはアクティブなインターフェースに対する閉じるようにという要求を起すだけで,最初のGUIRunがReleaseMethod->Manualオプションを使って閉じた後もインターフェースがライブであるように要求している場合にはReleaseGUIObjectのように必ずしもすべてのインスタンスリソースの除去を強制する訳ではない.GUIRunの呼出しがもともと意図したライフサイクルが必ず全うされるようにしたい場合は,ReleaseGUIObjectの代りにCloseGUIObjectを使うとよいだろう.こうすると,ReleaseMethod->Automaticが使われた場合はインターフェースに関連したすべてのリソースを閉じて除去してしまう可能性が高く,ReleaseMethod->Manualが使われた場合にはインターフェースが存続することを許すからである.
以下で,計算機の例題をロードすることでライブユーザインターフェースオブジェクトを作る.
GUIObjectQを使って表示していない場合でも,このユーザインターフェースがアクティブであることを検証できる.
マウスでアクティブなウィンドウを閉じる代りに,CloseGUIObjectを使ってウィンドウが閉じるようにプログラム的に要求する.
GUIObjectQがこのユーザインターフェースを正しく報告することと,GUIRunがデフォルトのAutomaticリリースメソッドで開始されたので,このGUIObjectとしてのランタイム表現がもはや有効ではないことが分かる.
次で,上記の代りにReleaseMethodオプションを使って閉じた後も定義がアクティブであるように要求する.
マウスでアクティブなウィンドウを閉じる代りに,CloseGUIObjectを使ってウィンドウが閉じるようにプログラム的に要求することができる.
次では,最初のManualリリースメソッドのお陰で定義がまだライブであるとGUIObjectQが正しく伝えるのが分かる.
ReleaseGUIObjectを使ってインターフェースを強制的に完全に閉じることもできる.
アクティブなモードレスインターフェースを表示前に,または完全に表示した後で処理したいと思ったときは,ReleaseGUIObjectを使って起動中のユーザインターフェースのシャットダウンと関連するすべてのリソースの除去を強制することができる.
次では,モードレスセッションで作ったインターフェースと関連するGUIObjectへの接続が得られている.
一旦ReleaseGUIObjectを呼び出すと,まるでユーザが正常のインタラクションでユーザインターフェースを閉じたようにインターフェースが閉じられる.
ユーザインターフェースに関連したリソースとJavaObjectはクリアされた.
GUIObjectQ関数を使って,ライブのGUIObjectリファレンスを閉じられたリファレンスから判断することもできる.
しかし,CloseGUIObjectを使ってアクティブインターフェースの閉アクションのみを開始することの方がより適切であろう.この理由は,GUIRunはオプションReleaseMethod->Manualをサポートし,たとえ閉じて再び開かれた後でもライブ定義の再利用を許可するからである.
GUIRunのReleaseMethod->Manualオプションを利用した一般的で役立つテクニックは,自動的に最初の作成を処理し,1つの定義コピーを定義するだけでなくユーザが手動でこれを閉じた場合にはこれの再描画も行い,ひとつのカーネルセッションの間ずっと使うことである.特定のインターフェース定義を要求するための次のラッパー関数は ,これらの概念すべてをサポートする.ここで"Wolfram/Example/PrimeFinder"はユーザが関心を持つ定義へのパスを表している.