dotNetMXSValue 値クラスは、別の値を保持します。dotNetMXSValue は、.net オブジェクトに割り当てることができます。DotNet の「プロキシ」値は、実際には DotNet オブジェクトに保管され、このプロキシが逆に dotNetMXSValue をポイントします。
DotNet オブジェクトがプロキシ値を保持している限りは、dotNetMXSValue とこれが保持する値はガベージ コレクションから保護されます。
3ds Max 9 以降で使用可能です。
例:
|
a = color 10 20 30 --MAXScript カラー値です。
b = dotNetMXSValue a --MAXScript 値を保持する DotNet 値です。
tv = dotnetobject "treeview" --DotNet TreeView コントロール
tv.tag = b --カラーにタグをセットします。
tv.tag
a=b=undefined --a と b の両方を undefined に設定して、
gc() --手動のガベージ コレクションを再度要求します。
--しかし、TreeView インスタンスが dotNetMXSValue プロキシを
--保持しているので、カラー値と dotNetMXSValue は
--ガベージ コレクションから保護されます。
tv = undefined- --TreeView 変数に undefined を割り当て、
gc() --ガベージ コレクションを再度要求します。
--今回はカラー値と dotNetMXSValue の両方が
--ガベージ コレクションから保護されます。
|
このガベージ コレクションでは、DotNet ガベージ コレクタは TreeView を削除せず、まだその値を解放していないので、カラー値と dotNetMXSValue はいずれも削除されません。DotNet の手動ガベージ コレクションを強制することも可能です。
例:
|
dgc = dotnetclass "system.gc"
dgc.collect()
gc() -- カラー値と dotNetMXSValue のコレクションが実行されます。
|