Iphone 对象msgSend后的exc_bad_访问,重新计数=2

Iphone 对象msgSend后的exc_bad_访问,重新计数=2,iphone,objective-c,ios,memory-management,Iphone,Objective C,Ios,Memory Management,我在第二线得到一个exc\u bad\u访问权限。currentCat的重新计数目前为2,堆栈跟踪中没有自动重新计数。 代码是由一个事件触发的,每12次运行失败就执行11次,没有任何问题(我真的不知道为什么是12次) 我的堆栈跟踪: 1.obj_msgSend 2. 3.“调用方法”->ok 据我所知,物体的存在不是零。我看不出有什么理由访问不好。 知道这里发生了什么吗。很可能是代码中的其他内容触发了错误,或者它可能是hasValidTag引用的属性之一。尝试通过产品>分析调用静态分析器。如果

我在第二线得到一个exc\u bad\u访问权限。currentCat的重新计数目前为2,堆栈跟踪中没有自动重新计数。 代码是由一个事件触发的,每12次运行失败就执行11次,没有任何问题(我真的不知道为什么是12次)

我的堆栈跟踪: 1.obj_msgSend 2. 3.“调用方法”->ok

据我所知,物体的存在不是零。我看不出有什么理由访问不好。
知道这里发生了什么吗。

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

关于您的代码没有太多要说的,但是exc\u bad\u访问错误本身可以作为解决问题的线索

当您在已发布对象上调用消息时,您将获得exc\u bad\u访问权限。您可以尝试跟踪您的对象,并找出出现此错误的原因

OBS.:在代码中,第一个条件

if(currentCat != nil) {
    if ([currentCat hasValidTag]) {...}}
if(currentCat != nil)
是没有意义的,因为第二个条件

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

足以检查currentCat是否为零。将消息调用为nil将返回nil而不执行任何操作。因此,第二个“如果”模块将不会被调用。

使用静态分析仪,我能够解决问题。谢谢!但就我而言,问题出在这里NSNumber*标记=[NSNumber numberWithInt:0];[validationTags replaceObjectAtIndex:i with Object:tag];[标签释放];释放导致了问题。但正如我所知,我应该在将每个对象添加到数组后释放它。那么为什么不在这种情况下呢?你没有在任何时候分配/保留/复制它,所以你不应该释放/自动释放它。
retainCount
是无用的。别这么说。