Thread 1: EXC_BAD_ACCESS错误含义、修复及iOS代码问题排查
错误「Thread 1: EXC_BAD_ACCESS (code=2, address=0x30d51fff8)」解析与修复
错误含义
这个错误是iOS开发中典型的内存访问异常:
- EXC_BAD_ACCESS:表示程序尝试访问了不被允许的内存区域
- code=2:此处的触发原因是无限递归耗尽栈空间——递归调用会持续占用栈帧,当超出系统允许的栈容量时,就会触发内存访问错误。同时因为递归一直在执行,界面无法完成渲染,所以出现白屏。
问题定位
你的代码核心问题出在updateQuestion()函数的无限递归调用:
func updateQuestion() { triviaLabel.text = quiz[questionNumber].text // Get the error here updateQuestion() // 这里递归调用自身,形成无终止循环 }
每次调用updateQuestion都会再次触发自身调用,循环无休无止,快速耗尽栈内存,最终触发错误。
修复步骤
- 移除递归调用
修改updateQuestion函数,删除内部的updateQuestion()调用,修改后代码如下:func updateQuestion() { triviaLabel.text = quiz[questionNumber].text // 可按需添加进度条更新逻辑,比如: // progressBar.progress = Float(questionNumber + 1) / Float(quiz.count) } - 验证辅助项(可选)
- 确认
Question类定义正确,示例如下:struct Question { let text: String let answer: String } - 若修复后仍有问题,再检查
triviaLabel的IBOutlet关联是否正常(你已尝试重新关联,大概率无问题)
- 确认
内容的提问来源于stack exchange,提问作者Hetasha
相关产品推荐
相关产品推荐

