2010-07-06 34 views
1

任何人都可以用Objective-C中创建的无效对象指导我。我正在开发iPhone SDK。我看到应用程序中创建的无效对象会导致应用程序崩溃。Objective-C无效对象

这里是它的外观

alt text http://img816.imageshack.us/img816/9208/picture1z.png

,其中作为在日志中我得到计划接收信号的屏幕截图:“EXC_BAD_ACCESS”。

我需要以下方面的帮助。

  • 它们是如何创建的。
  • 如何防止它们。
  • 如何检测它们。

回答

2

该错误表示您向已发布的对象发送了消息(换句话说,某个对象的保留计数已达到零,因此您在某处过度释放该对象)。在Xcode中,您可以在Debug环境中将NSZombieEnabled设置为YES;这会使得释放对象应该释放,然后当一个零计数对象被消息发送时,调试器应该中断,你会得到一个日志条目,显示什么对象被过度释放以及你的通常的调用堆栈等等。

确保只有在您尝试查找过度释放的对象时才使用NSZombie。

+0

当存储在数组中的对象失效时,就会出现问题,如图所示,我正在使用应用程序委托共享数组。 – Ameya 2010-07-06 06:24:13

+0

如何处理需要重新初始化的分配的实例,如if(notes == nil)notes = [[NSMutableArray alloc] init];其他{[笔记保留]; notes = [[NSMutableArray alloc] init];} – Ameya 2010-07-06 06:32:25

+0

'else {[notes release],notes = nil; notes = [[NSMutableArray alloc] init]; }' – 2010-07-06 06:53:40

0

我看不到你的屏幕截图,但是当你访问一个通常在你使用它之前发布的对象时,会给你EXC_BAD_ACCESS。你不能真正阻止编码,它发生在我们所有人在某个点或另一个点。你只需要学习如何找到访问该对象的代码并学会修复它。

打开NSZombies你将不得不调试你的应用程序。谷歌如何使用NSZombies,这应该可以帮助你找到你的问题。