Destroyイベント = instance_destroy()が呼ばれた瞬間に実行!
CleanUpイベント = Destoryイベントの直後、Roomの移動によってオブジェクトが破棄された直後、ゲーム終了によってオブジェクトが破棄された直後に実行!
【注意⓵】
ds系やsurfaceなどメモリを確保した変数をDestroyイベントで解放した際、Roomの移動時には実行されないのでメモリは解放されません!
【注意⓶】
DestroyイベントとCleanUpイベントはinstance_destroy()が呼ばれたと同時にDesotroy→CleanUpの順で実行されるがinstance_destory()が呼び出されたイベントは最後の行まで呼び出されます。
//Destroyイベント or CleanUpイベント
ds_list_destroy(list);
//Stepイベント
if(isDead == true) {
instance_destroy();//この時点でDestror・CleanUpイベントが呼ばれlistのメモリは解放!
}
ds_list_add(list,"テスト");//listのメモリは解放されてるのでエラー!
なのでreturnかexitを読びStepイベントを即刻終了させる。
if(isDead == true) {
instance_destroy();
return;
}
【結論】
- メモリを解放する処理は基本CleanUpイベントに書く!
- instance_destroyが呼ばれた後にメモリを解放した変数がないか注意する!