当我创建 DDXMLDocument 的自动释放对象时,我的应用程序崩溃了

Posted

技术标签:

【中文标题】当我创建 DDXMLDocument 的自动释放对象时,我的应用程序崩溃了【英文标题】:My app crashed when I created autorelease object of DDXMLDocument 【发布时间】:2012-04-09 20:40:50 【问题描述】:

我的应用没有崩溃。

DDXMLDocument *d = [[DDXMLDocument alloc] initWithData:abookConnData options:0 error:nil];
books = [d nodesForXPath:@"abooks/abook" error:nil];

我将 DDXMLDocument 的对象更改为自动释放,我的应用程序开始崩溃。但是为什么呢?

DDXMLDocument *d = [[[DDXMLDocument alloc] initWithData:abookConnData options:0 error:nil] autorelease];
books = [d nodesForXPath:@"abooks/abook" error:nil];

我的应用程序在 DDXMLNode 中崩溃。 [DDXMLNode XMLStringWithOptions:]

【问题讨论】:

【参考方案1】:

您没有给出足够的代码来肯定地说,但这几乎可以肯定是您的 DDXMLDOcument* (d) 在您使用它之前就已发布。

尝试打开僵尸检测并在异常上设置断点。通常,这可以引导您找到问题所在的确切代码行。

另一个调试技巧是创建一个 DDXMLDocument 的子类并覆盖 ALLOC 和 RELEASE 以调用 NSLog() 事件(然后是 [super alloc][super release]!),这样您就可以看到正在发生的事情。

【讨论】:

以上是关于当我创建 DDXMLDocument 的自动释放对象时,我的应用程序崩溃了的主要内容,如果未能解决你的问题,请参考以下文章

在创建对象后自动释放对象时出错

KissXML/DDXMLDocument: Declaration of 'xmlKeepBlanksDefault' must be imported

何时使用自动释放变量? [复制]

在自动释放池 内释放创建的自动释放对象 [关闭]

NSURLConnection 启动 + 自动释放

Return 语句创建和释放对象