destroy
销毁小游戏运行环境
destroy 是小游戏生命周期的终点。调用此方法会彻底关闭游戏引擎,回收所有占用的系统资源(包括 JavaScript 虚拟机内存、渲染缓冲区、线程池及纹理资源),并将实例状态重置为不可用。
方法声明
objectivec
/**
* 销毁小游戏运行环境。
* 操作成功后,小游戏实例将进入 `UNAVAILABLE` 状态。
* 调用后,该句柄关联的所有内存和视图资源将被释放。
*/
- (void)destroy;参数说明
| 参数名 | 类型 | 必传 | 描述 |
|---|---|---|---|
| 无 | - | - | 该方法不接受参数。 |
运行行为
- 资源回收:强制停止所有正在运行的 JS 脚本,销毁 JSC 虚拟机上下文。
- 渲染卸载:释放所有 GPU 纹理资源,停止 Metal/OpenGL 渲染循环。
- 视图清理:
getGameView返回的视图将被销毁。如果该视图已添加到父视图中,建议在调用前手动移除或在调用后置空引用。 - 状态迁移:执行后,状态变为
SUD_RT_GAME_STATE_UNAVAILABLE (0)。该句柄不可再次调用create或start。
代码示例
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 移除操作同步。