报错
EXC_BAD_ACCESS
EXC: exception 异常
BAD_ACCESS: 不能访问
原因
向一个已经释放的对象发送消息
解决办法
用僵尸对象找到造成错误的野指针代码
什么是僵尸对象
僵尸对象是用于捕捉内存错误的调试功能。
NSZombieEnabled
NSZombieEnabled是一个环境变量,可以控制 Core Foundation 的运行时是否将使用僵尸对象。在发布的构建包中一定要禁用 NSZombieEnabled。
开启Xcode僵尸模式 ( NSZombieEnabled )
Product -> Scheme -> Edit Scheme -> Diagnostics -> 勾选Zombie Objects
Product -> Scheme -> Edit Scheme -> Arguments设置NSZombieEnabled、MallocStackLoggingNoCompact两个变量,且值均为YES。
仅设置Zombie Objects的话,如果Crash发生在当前调用栈,系统可以把崩溃原因定位到具体代码中;但是如果Crash不是发生在当前调用栈,系统仅仅告知崩溃地址,所以我们需要添加变量MallocStackLoggingNoCompact,让Xcode记录每个地址alloc的历史,然后通过命令将地址还原出来。