iPhone中的EXC_BAD_ACCESS异常

时间:2010-08-24 17:47:29

标签: iphone objective-c exc-bad-access

我得到了这段代码:

- (void)postToWall {

FBStreamDialog *dialog = [[FBStreamDialog alloc] init];
dialog.userMessagePrompt = @"Un tuo commento:";
dialog.attachment = [NSString stringWithFormat:@"{\"name\":\"Bla: %@\"", facebookName];
[dialog show];

[dialog release];
}

第一次执行它工作正常,没问题。但是,如果我发布或跳过然后我再次发布,我得到了一个EXC_BAD_ACCESS,由于facebookName。控制台显示没有错误,我通过DebugConsole找到它。我真的不知道为什么会这样,有人可以帮忙吗?

编辑:已解决! 在代码的其他部分,我按名称访问了facebookName字符串。这显然会导致崩溃,所以我合成了它,然后通过“self.facebookName”访问它。

谢谢。

2 个答案:

答案 0 :(得分:3)

您应该显示有关facebookName的上下文代码。

我想也许它会在您再次使用它时发布。为了安全起见,您可以尝试在方法开头执行[facebookName retain],然后在最后执行[facebookName release],以表示您需要保留对象以执行某些操作。

是的,使用composite属性会在分配对象时自动保留对象(前提是你有(nonatomic, retain))。以前,它没有保留,所以当你再次使用它时,你会得到EXC_BAD_ACCESS,因为它不再存在(当时被释放,再次原因,它没有被保留)。

答案 1 :(得分:1)

在崩溃时,您可能无法获得有效的堆栈跟踪。

跟踪EXC_BAD_ACCESS真正原因的最快方法是使用NSZombieEnabled可执行参数,然后在objc_exception_throw上设置断点。这将为您提供堆栈跟踪,并允许您具体确定您尝试访问的对象。

http://www.cocoadev.com/index.pl?NSZombieEnabled

Using Malloc to debug