NSXMLParser的委托和内存泄漏

时间:2010-05-05 21:48:53

标签: iphone objective-c memory-management memory-leaks delegates

我在我的程序中使用NSXMLParser类,并为其分配了一个委托。 但是,这个委托由setDelegate:方法保留,导致一个小的,但令人讨厌的:-),内存泄漏。

我无法在setDelegate之后释放委托类:因为程序会崩溃。

这是我的代码:

self.parserDelegate = [[ParserDelegate alloc] init]; //retainCount:1
self.xmlParser = [[NSXMLParser alloc] initWithData:self.xmlData];
[self.xmlParser setDelegate:self.parserDelegate]; //retainCount:2
[self.xmlParser parse];
[self.xmlParser release];

ParserDelegate是委托类。

当然,如果我将'self'设置为委托,我将没有问题,但我想知道是否有办法使用不同的类作为委托而没有泄漏。

提前谢谢。

2 个答案:

答案 0 :(得分:2)

来自setDelegate上的documentation

“作为新委托的对象。不保留。委托必须符合NSXMLParserDelegate协议协议。”

所以不用担心。此外,即使它被保留,正确的NSXMLParser类也会在'dealloc'中释放委托。所以我认为你没有泄漏。

你崩溃的原因是你要释放委托,因为你把保留计数降到了0.

答案 1 :(得分:0)

如果您将属性parserDelegate设置为retain并使用合成方法(通过使用self)进行初始设置,则可能是您的泄漏。