崩溃
- Dominant language
- JavaScript
- Stars
- 41.6k
- Forks
- 3.7k
- Avg merge
- 7h 6m
- Merged PRs (30d)
- 6
Description
### 发行方式
App
### 具体平台
iOS
### 开发环境
macOS
### 项目创建方式
HBuilderX
### Vue 版本
vue2
### 依赖版本
无
### 问题描述
EXC_BAD_ACCESS(SIGSEGV) in [PGNavigator getUiStyle:]
该崩溃是典型的野指针访问(访问已释放内存)。崩溃发生在 _objc_msgSend(Objective-C 消息发送底层函数),说明 PGNavigator 实例已被释放,但后续仍被调用 getUiStyle: 方法。调用栈显示从 Weex 的 JavaScript 线程(WXBridgeManager 创建)发起调用,最终在 PGNavigator.mm 中触发崩溃。
可能原因分析(按可能性排序)
多线程对象生命周期问题(最可能)
PGNavigator 实例在主线程被释放,但 Weex 的 JS 线程仍在访问它(调用栈第 6 帧 -[H5WeexWebview refreshWeex]_block_invoke 运行在 JS 线程)。
依据:EXC_BAD_ACCESS + _objc_msgSend 崩溃模式 + 跨线程调用栈。
对象提前释放
PGNavigator 被弱引用(weak)持有,或未正确强引用,导致被 ARC 提前释放。
依据:崩溃在对象方法调用时发生,且无其他明显异常。
Weex 模块生命周期同步问题
Weex 实例销毁时未清理对 PGNavigator 的引用,JS 线程回调时访问了已销毁的 Native 对象。
### 重现步骤
无
### 期望行为
修好
### 实际行为
崩溃
### 截图或录屏
Contributor guide
Assessment
This issue has not been assessed yet.