Skip to content

destroy

销毁小游戏运行环境

destroy 是小游戏生命周期的终点。调用此方法会彻底关闭游戏引擎,回收所有占用的系统资源(包括 JavaScript 虚拟机内存、渲染缓冲区、线程池及纹理资源),并将实例状态重置为不可用。


方法声明

objectivec
/**
 * 销毁小游戏运行环境。
 * 操作成功后,小游戏实例将进入 `UNAVAILABLE` 状态。
 * 调用后,该句柄关联的所有内存和视图资源将被释放。
 */
- (void)destroy;

参数说明

参数名类型必传描述
--该方法不接受参数。

运行行为

  1. 资源回收:强制停止所有正在运行的 JS 脚本,销毁 JSC 虚拟机上下文。
  2. 渲染卸载:释放所有 GPU 纹理资源,停止 Metal/OpenGL 渲染循环。
  3. 视图清理getGameView 返回的视图将被销毁。如果该视图已添加到父视图中,建议在调用前手动移除或在调用后置空引用。
  4. 状态迁移:执行后,状态变为 SUD_RT_GAME_STATE_UNAVAILABLE (0)。该句柄不可再次调用 createstart

代码示例

objectivec
- (void)dealloc {
    [self cleanupGame];
}

- (void)cleanupGame {
    if (self.gameHandle) {
        // 1. 建议先停止运行并通知游戏层
        [self.gameHandle stop:@"{\"reason\":\"dealloc\"}"];
        
        // 2. 彻底销毁环境
        [self.gameHandle destroy];
        
        // 3. 移除引用并清理 UI
        dispatch_async(dispatch_get_main_queue(), ^{
            UIView *gameView = [self.gameHandle getGameView];
            [gameView removeFromSuperview];
            self.gameHandle = nil;
        });
    }
}

注意事项

  • 内存泄漏预防:在 ViewController 销毁或用户退出游戏场景时,务必调用 destroy。否则,后台运行的 JS 引擎和缓存的纹理会导致严重的内存积累。
  • 不可逆性:一旦执行 destroy,当前的 gameHandle 实例即告作废。若需重新进入游戏,必须创建新的句柄实例并重新执行全套生命周期。
  • 时机选择:如果只是暂时切到后台或弹出原生界面,应使用 pause;只有在确认不再需要当前游戏实例时才使用 destroy
  • 线程安全:建议在 主线程 发起销毁指令,以确保与 UI 移除操作同步。