我在我的程序中使用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'设置为委托,我将没有问题,但我想知道是否有办法使用不同的类作为委托而没有泄漏。
提前谢谢。
答案 0 :(得分:2)
来自setDelegate上的documentation:
“作为新委托的对象。不保留。委托必须符合NSXMLParserDelegate协议协议。”
所以不用担心。此外,即使它被保留,正确的NSXMLParser类也会在'dealloc'中释放委托。所以我认为你没有泄漏。
你崩溃的原因是你要释放委托,因为你把保留计数降到了0.
答案 1 :(得分:0)
如果您将属性parserDelegate
设置为retain
并使用合成方法(通过使用self
)进行初始设置,则可能是您的泄漏。