DeviceCentral

トピック参照先:

モバイルデバイスに適した Flash Lite ファイルメモリの管理

Flash Lite では、ファイルから参照されなくなったオブジェクトや変数がメモリから定期的に消去されます。 この処理はガベージコレクションと呼ばれます。 Flash Lite では、60 秒ごと、またはファイルのメモリ使用率が急激に 20 %以上増加したときに、ガベージコレクション処理が実行されます。

Flash Lite でガベージコレクションを実行する方法やタイミングは制御できませんが、不要なメモリを意図的に解放することはできます。 タイムラインまたはグローバル変数の場合、delete 文を使用して、ActionScript オブジェクトが使用するメモリを解放します。 ローカル変数(例えば、関数の定義内で定義した変数)の場合、delete 文を使用してオブジェクトのメモリを解放することはできませんが、オブジェクトを参照する変数に null を設定できます。 これにより、そのオブジェクトへの参照が他にない場合は、そのオブジェクトが使用するメモリを解放できます。

次の 2 つのコード例は、オブジェクトを参照する変数を削除することで、オブジェクトが使用するメモリを解放する方法を示します。 2 つの例は、1 つ目がタイムライン変数を作成し、2 つ目がグローバル変数を作成する点以外は同じです。

// First case: variable attached to a movie or 
// movie clip timeline
//
// Create the Date object.
var mcDateObject = new Date();
// Returns the current date as a string.
trace(mcDateObject);
// Delete the object.
delete mcDateObject;
// Returns undefined.
trace(mcDateObject);
//
// Second case: global variable attached to a movie or 
// movie clip timeline 
//
// Create the Date object.
_global.gDateObject = new Date();
// Returns the current date as a string.
trace(_global.gDateObject);
// Delete the object.
delete _global.gDateObject;
// Returns undefined.
trace(_global.gDateObject);

前述のように、ローカル関数の変数が使用するメモリを解放する場合は delete 文を使用できません。 代わりに、変数の参照先を null に設定します。これは、delete を使用した場合と同じ効果があります。

function func()
{
	// Create the Date object.
	var funcDateObject = new Date();
	// Returns the current date as a string.
	trace(funcDateObject);
	// Delete has no effect.
	delete funcDateObject;
	// Still returns the current date.
	trace(funcDateObject);
	// Set the object reference to null.
	funcDateObject = null;
	// Returns null.
	trace(funcDateObject);
}
// Call func() function.
func();