引用计数对象在发布后使​​用?的NSXMLParser

时间:2012-04-11 21:07:00

标签: xml xcode memory nsxmlparser memory-leaks

我从这个网站下载了这段代码。 http://homepages.ius.edu/rwisman/C490/html/nsxmlparser.htm

我分析一下。我有内存泄漏。我试过谷歌的一切从autorelease,发件人,零,[解析器setDelegate:[Top10Parser新]]等,它不起作用。

我需要帮助。

- (void) run: (id) param  {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSXMLParser *parser = [NSXMLParser alloc];
    [parser initWithContentsOfURL: url];

[parser setDelegate:self]; < - (“引用计数对象在发布后使​​用”)

    [parser parse];
    [parser release];

    if ([delegate respondsToSelector:@selector(parseDidComplete:)])
        [delegate performSelector:@selector(parseDidComplete:) onThread: thread 
                       withObject: outstring waitUntilDone:NO];

    [pool release];
} 

1 个答案:

答案 0 :(得分:2)

更改这两行:

NSXMLParser *parser = [NSXMLParser alloc];
[parser initWithContentsOfURL: url];

NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL: url];

对于某些思想流派,+alloc返回一个拥有的对象,而init方法既不添加也不删除所有权。它更正确 - 它是分析器如何处理它 - 想到一个init方法在接收器上消耗一个引用并返回一个拥有的对象。因此,如果您调用init方法但未将结果分配给self,那么您对self的所有权已被使用,并且您没有指向新拥有对象的指针。 self的所有未来用途都在使用您不再拥有的对象。