EXC_BAD_ACCESS 查错步骤
1、Xcode -> Product -> Scheme -> EditScheme;增添MallocStackLogging和NSZombieEnabled两个环境变量;分别用于记录内存alloc和监控zombie内存.
2、重新运行项目至崩溃点. 此时程序会打印额外的关于内存的日志程碌食撞搁序崩溃点得到如下日志:-----------------------幻腾寂埒---------------------------------------------------------------------------2014-09-30 10:24:38.753 P2PCamLive[280:20505]*** -[UILabel release]: message sent to deallocated instance 0x17eb9800--------------------------------------------------------------------------------------------------可知, 是由于UILabel dealloc时崩溃, 基本确定是过度释放内存导致.
3、打开Instruments工具:Xcode -> Open Developer Tool -> Instruments,选择Zombies类型.
4、重新启动运行Project, 先不要执行到崩溃点.在打开的Instruments工具中choose要检查的程序名称;然后点击Instruments左上角的record按钮, 开始记录内存使用情况.
5、继续执行程序至崩溃点.程序执行到第40秒报出zombie Messaged错误;点击图中圈选的">"查看内存详情.
6、分析内存调用详情:排除操作系统retain, release的部分,可知是由于CameraLiveViewController执行dealloc,对内存0x180d5420多调用了release.
7、综合以上结果:可知是存在于觊皱筠桡CameraLiveViewController中的一个UILabel多执行了release.此时可添加代码对潮贾篡绐CameraLiveViewController中的可疑UILabel打印日志.重新执行上述过程, 对比打印UILabel与Zobmie内存的地址,从而定位出错位置.