我开发我的第一个iphone应用程序的方法很多,而且我一直在运行exc_bad_access。 (我确定这是因为我还没有以非常适合MVC的方式设计内容。)
试图找到我为什么一直遇到这些错误是非常令人沮丧的...在xcode调试器中有一种方法可以保存指针的监视列表,这样你就可以看到各种对象何时出现释放?什么,什么能让我更直观地了解我的程序设计为何有缺陷?
特别是,我一直在使用我的“webobject”类,我已经将所有NSURLConnection方法都包装好了。当我尝试将调试器调用到启动了“webobject”请求的视图控制器时,我不断得到exc_bad_access我尝试访问webobject的综合属性。我的想法是,我应该将所有与webservice相关的方法包装到一个可以在任何地方导入的类中,这是否存在根本性的错误?
答案 0 :(得分:1)
戴夫,
我不知道跟踪对象释放的方法(尤其是像NSStrings这样的本机对象)。但是,在启动Objective-C编程时,我遇到了大量的exc_bad_access消息。但有一天,我读到了一些帮助我摆脱这些信息的东西:
如果使用alloc,copy或以new开头的方法创建对象,则它是您管理和取消分配的对象。您可以调用retain和release,该循环将按预期在这些对象上运行。如果你从来没有在它上面调用release或dealloc,那么它将会挂起并且是一个泄漏。如果你调用类似'stringWithFormat'的方法,numberWithYadaYada那么该对象被设置为自动释放。意思是,一旦退出正在使用它的方法,它就可能被解除分配。因此,如果您调用了其中一种自动释放方法,则必须在以后查看时保留它。
我怀疑您的委托或NSURLConnection正在自动释放,这是您的错误访问消息的原因。
杰克
答案 1 :(得分:1)
您可以尝试在-[NSObject dealloc]
上创建一个断点(或者在您要定位的子类上使用相同的方法)。
我还会向您推荐许多Cocoa内存处理教程之一。
答案 2 :(得分:1)
我最后了解了NSZombieEnabled,它帮助我追踪了那些exc_bad_access消息。更多信息:http://www.cocoadev.com/index.pl?NSZombieEnabled
答案 3 :(得分:0)
就像一般情况一样,你应该作为一个静态分析器运行,它可能会告诉你何时你在保持对象之上或之下。