Flutter Engine 随机崩溃(EXC_BAD_ACCESS)问题排查求助
问题分析与解决
核心问题
你的代码存在重复创建同名FlutterEngine的致命问题:
- AppDelegate启动时已初始化并运行了名为
my flutter engine的全局引擎 - HomeVC中又手动销毁原有引用、重新创建同名引擎并启动,这会触发Flutter内部资源冲突,直接导致内存访问错误(EXC_BAD_ACCESS)
修复步骤
1. 复用全局引擎实例
删除HomeVC里重新创建引擎的代码,直接复用AppDelegate中已初始化好的引擎:
// HomeVC.m 修改后代码 FlutterEngine *flutterEngine = ((IKAppDelegate *)UIApplication.sharedApplication.delegate).flutterEngine; // 仅在全局引擎未初始化的极端情况才创建(可选) if (flutterEngine == nil) { flutterEngine = [[FlutterEngine alloc] initWithName:@"my flutter engine"]; [flutterEngine run]; [GeneratedPluginRegistrant registerWithRegistry:flutterEngine]; // 将新引擎赋值回AppDelegate,保证全局唯一 ((IKAppDelegate *)UIApplication.sharedApplication.delegate).flutterEngine = flutterEngine; } // 直接用全局引擎创建FlutterViewController FlutterViewController *flutterViewController = [[FlutterViewController alloc] initWithEngine:flutterEngine nibName:nil bundle:nil]; FlutterMethodChannel* moduleChannel = [FlutterMethodChannel methodChannelWithName:@"com.ikea.kompis/nativeToFlutter" binaryMessenger:flutterViewController.binaryMessenger]; [moduleChannel invokeMethod:@"nativeToFlutter" arguments:jsonString]; flutterViewController.modalPresentationStyle = UIModalPresentationFullScreen; [self presentViewController:flutterViewController animated:YES completion:nil];
2. 移除重复的插件注册操作
AppDelegate中已经执行过[GeneratedPluginRegistrant registerWithRegistry:self.flutterEngine],HomeVC里不要再重复调用,否则会引发插件多次注册的内存问题。
3. 清理危险的内存操作
删除HomeVC中flutterEngine = nil的手动置空代码,这会破坏全局引擎的引用链,导致不可控的内存释放。
额外优化建议
- 封装全局FlutterEngine管理类,统一处理引擎的初始化、获取和销毁逻辑,避免多处操作导致的状态不一致
- 若需多引擎场景,必须使用不同的引擎名称,禁止重复使用同一名称创建引擎
内容的提问来源于stack exchange,提问作者seena seena
相关产品推荐
相关产品推荐

