EXC_BAD_ACCESS来检查if语句条件?

时间:2011-03-07 22:41:02

标签: iphone ios4 iphone-sdk-3.0

我的应用中收到了EXC_BAD_ACCESS错误消息。基于一堆NSLog,我已经能够确定这是在检查if语句的条件时引起的。我的if语句如下:

if ( ([todaysDate compare:mostRecentDate] != NSOrderedSame) || (mostRecentDate == nil) ) {
   //Do Stuff
}

有人可以告诉我为什么我会收到此错误吗?

注意:todaysDate和mostRecentDate是在代码中设置不同点的ivar

3 个答案:

答案 0 :(得分:1)

您的情况更可能是由于您的变量保留不足造成的。这在您之前使用自动释放的对象而不保留该值时尤为常见,因此您不拥有该对象,它在运行循环中先前已释放。

修改 由于您使用的是ivar,因此您可以使用@property (retain)确保在设置ivar时正确保留它,或使用retain关键字并自行处理保留计数。

答案 1 :(得分:0)

当您向已解除分配的对象发送消息时,会导致EXC_BAD_ACCESS。很可能在你的代码中的早些时候,你发布了todayDate或mostRecentDate而没有将它们设置为nil,从而向发布的对象发送消息。

答案 2 :(得分:0)

EXC_BAD_ACCESS是一个操作系统级异常,表示您正在尝试访问不属于您的应用程序的内存。这通常发生在对象过早放弃其所有权(将release发送到早期),或者您没有明确取得您应拥有的对象的所有权时(使用retain)。在这种情况下,您可以做一些事情:

  1. 运行static analyser,这有助于捕捉您忽略memory management rules的情况。
  2. Enable zombies。这将告诉您是否尝试将实例发送到已释放的对象。