使用retainCount = 2的obj_msgSend之后的exc_bad_access

时间:2011-11-01 16:59:30

标签: iphone objective-c ios memory-management

if(currentCat != nil) {
    if ([currentCat hasValidTag]) {...}}

我在第二行收到了一个exc_bad_access。目前,retainCat的retainCount为2,堆栈跟踪中没有自动释放。 代码由一个事件触发并执行十一次而没有任何问题每一次运行失败(我真的不知道为什么十二个)。

我的堆栈跟踪: 1. obj_msg发送 2。 3.“呼叫方法” - >好 ...

据我所知,存在的对象不是零。我看不出任何bad_access的原因。 不知道这里发生了什么。

2 个答案:

答案 0 :(得分:0)

您的代码中的其他内容可能会触发错误 - 或者它可能是hasValidTag引用的属性之一。尝试通过Product>调用静态分析器分析。如果这不起作用,请尝试使用Zombies工具(产品>配置文件)。

答案 1 :(得分:0)

关于你的代码没什么好说的,但是exc_bad_access错误本身可以解决你的问题。

当您在已发布的对象上调用消息时,您将获得exc_bad_access。您可以尝试use Instruments with NSZumbie跟踪您的对象并找出导致此错误的原因。

OBS。:在您的代码中,第一个条件

if(currentCat != nil)

有点无意义,因为第二个条件

if ([currentCat hasValidTag])

足以检查currentCat是否为零。将消息调用为nil将返回nil并且不执行任何操作。所以不会调用第二个'if'块。