0

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

正如我分析它。我有内存泄漏。我已经尝试了从 autorelease、sender、nil、[parser setDelegate: [Top10Parser new]] 等谷歌的所有内容。它不起作用。

我需要帮助。

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

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

[解析器 setDelegate: self]; <- ("Reference-counted object is used after it is release")

    [parser parse];
    [parser release];

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

    [pool release];
} 
4

1 回答 1

2

更改这两行:

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

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

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

于 2012-04-11T21:25:24.257 回答