帮助解决NSZombie错误消息

时间:2010-10-20 16:19:51

标签: iphone objective-c memory

我有一个模态视图控制器,当它自动解除时会崩溃。错误是EXC_BAD_ACCESS(yipee)。我试着用NSZombie来解决这个问题。我得到以下内容:

2010-10-20 17:15:58.936 [24058:207] AddRunningClient在非零客户端计数上启动设备 2010-10-20 17:16:06.846 [24058:207] * - [ViewController retain]:消息发送到解除分配的实例0x6c2d4a0

这是什么意思 - 它是否意味着消息被发送到Viewcontroller或消息被发送到Viewcontroller中的对象?

我真的被卡住,因为线程似乎是主要的:(

提前感谢所有人的帮助,

马丁

修改

感谢大家的快速回复。以下是我展示视图控制器的方法:

-(IBAction)letsstartGame {

ViewController * sl = [[ViewController alloc] initWithNibName:@"ViewController" bundle:[NSBundle mainBundle]];  
self.viewLink = sl;
[sl release];

[mainMenu stop];
[mainMenu setCurrentTime:0.0];

[self presentModalViewController:viewLink animated:NO];

[viewLink release];
self.viewLink = nil;

}

并且这样解雇:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

if (waitingOver) {

    [backgroundMain stop];
    [fireworks stop];

    [self dismissModalViewControllerAnimated:NO];

}   

}

3 个答案:

答案 0 :(得分:2)

这意味着你有一个类型为ViewController的对象的实例,它被解除分配,然后你尝试retain它。

修改

你过度释放了这个物体。这是你正在做的事情:

ViewController * sl = [[ViewController alloc] initWithNibName:@"ViewController" bundle:[NSBundle mainBundle]];  //allocated, has a +1 retain count
self.viewLink = sl;  //assuming a retain property, has a +2 retain count
[sl release]; //releasing, now has +1 retain count
....    
[viewLink release]; //releasing, now has a 0 retain count
self.viewLink = nil; //attempting to release stale pointer, will result in a crash (perhaps not immediately, but eventually)

摆脱[viewLink release]行。在那里拥有它是错误的。

答案 1 :(得分:1)

这意味着您正在向已释放的实例发送消息。 因此,代码中的某个位置无法保留对象(可能是ViewController)或者过早地释放它。

如果您可以将代码发布到创建可能对我们进行调试有帮助的View Controller的位置。

答案 2 :(得分:1)

该消息基本上是说您正在尝试向已经被释放(释放并释放内存)的对象发送消息(调用函数)。如果您可以发送更多代码,我可能会尝试确定原因。