0

我在开发我的第一个 iphone 应用程序方面还有一些方法,而且我经常遇到 exc_bad_access。(我确定这是因为我还没有以非常适合 MVC 的方式设计东西。)

试图找出为什么我总是遇到这些错误是非常令人沮丧的......在 xcode 调试器中是否有办法保持指针的监视列表,这样你就可以真正看到各种对象何时被释放?什么东西,什么东西能让我更直观地理解为什么我的程序设计有缺陷?

特别是,我的“webobject”类一直有问题,我已经将所有 NSURLConnection 方法都包装在其中。当我尝试将 performselector 调用到发起“webobject”请求的视图控制器时,当我尝试访问 webobject 的综合属性。我应该将所有与 web 服务相关的方法包装到一个可以在任何地方导入的类中的想法是否存在根本性的错误?

4

4 回答 4

1

戴夫,

我不知道如何跟踪对象的释放(尤其是像 NSStrings 这样的本机对象)。但是,在开始 Objective-C 编程时,我遇到了类似的大量 exc_bad_access 消息。但是有一天,我读到了一些对我摆脱这些信息有很大帮助的东西:

如果您使用 alloc、copy 或以 new 开头的方法创建对象,则管理和释放对象就是您的对象。您可以调用保留和释放,该循环将在这些对象上按预期工作。如果您从不对其调用 release 或 dealloc,它将永远存在并成为泄漏。如果您调用类似于“stringWithFormat”、numberWithYadaYada 的方法,则该对象设置为自动释放。这意味着,一旦您退出正在使用它的方法,它可能会被释放。因此,如果您调用了这些自动释放方法之一,则必须保留它以便以后查看。

我怀疑您的委托或 NSURLConnection 正在自动释放,这是您访问错误消息的原因。

杰克

于 2009-08-09T13:02:21.890 回答
1

-[NSObject dealloc]您可以尝试在(或您所针对的子类上的相同方法)上创建断点。

我还会向您推荐许多 Cocoa 内存处理教程之一。

于 2009-08-09T13:08:56.027 回答
1

I ended up reading up about NSZombieEnabled, which has helped me track down those exc_bad_access messages. More info here: http://www.cocoadev.com/index.pl?NSZombieEnabled

于 2009-08-20T01:59:34.190 回答
0

就像一般情况一样,您应该作为静态分析器运行,它可能会告诉您何时超过或低于保留对象。

相关的stackoverflow问题

于 2009-08-10T01:53:53.390 回答