我的应用中收到了EXC_BAD_ACCESS错误消息。基于一堆NSLog,我已经能够确定这是在检查if语句的条件时引起的。我的if语句如下:
if ( ([todaysDate compare:mostRecentDate] != NSOrderedSame) || (mostRecentDate == nil) ) {
//Do Stuff
}
有人可以告诉我为什么我会收到此错误吗?
注意:todaysDate和mostRecentDate是在代码中设置不同点的ivar
答案 0 :(得分:1)
您的情况更可能是由于您的变量保留不足造成的。这在您之前使用自动释放的对象而不保留该值时尤为常见,因此您不拥有该对象,它在运行循环中先前已释放。
修改强>
由于您使用的是ivar,因此您可以使用@property (retain)
确保在设置ivar时正确保留它,或使用retain
关键字并自行处理保留计数。
答案 1 :(得分:0)
当您向已解除分配的对象发送消息时,会导致EXC_BAD_ACCESS。很可能在你的代码中的早些时候,你发布了todayDate或mostRecentDate而没有将它们设置为nil,从而向发布的对象发送消息。
答案 2 :(得分:0)
EXC_BAD_ACCESS
是一个操作系统级异常,表示您正在尝试访问不属于您的应用程序的内存。这通常发生在对象过早放弃其所有权(将release
发送到早期),或者您没有明确取得您应拥有的对象的所有权时(使用retain
)。在这种情况下,您可以做一些事情: