我们做 iOS
比如你对已释放的对象发送消息时就会出现,EXC_BAD_ACCESS,再如 release
首先解释下EXC_BAD_ACCESS,当你向已经释放的对象发送消息时就会出现这种错误。
至于NSZombieEnabled,就是当设置NSZombieEnabled环境变量后,一个对象销毁时会被转化为_NSZombie,个人感 觉和线程的那几个状态有些相似,设置NSZombieEnabled后,当你向一个已经释放的对象发送消息,这个对象就不会向之前那样Crash或者产生 一个难以理解的行为,而是放出一个错误消息,然后以一种可预测的可以产生debug断点的方式消失(原文是die),因此我们就可以找到具体或者大概是哪 个对象被错误的释放了。
比如
01
02
03
04
05
06
07
08
09
10
11
12
|
static NSMutableArray *array;
- ( void )viewDidLoad
{
[ super viewDidLoad];
array = [[ NSMutableArray alloc] initWithCapacity:5];
[array release];
}
- ( void ) viewWillAppear:( BOOL )animated {
[array addObject:@ "Hello" ];
}
|
上面的代码就会出现 EXC_BAD_ACCESS
不过 NSZombieEnabled
对
*** -[__NSArrayM addObject:]: message sent to deallocated instance 0x6557370
如何设置
Xcode3
1.
2.
3.
Xcode4
你可以点击 Xcode4 菜单 Product -> Edit Scheme -> Arguments, 然后将点击”加号”, 将 NSZombieEnabled参数加到 Environment Variables 窗口中, 后面的数值写上 ”YES”.
或者在 Xcode4 菜单