Iphone NSXMLParser Asynch-如何正确发布?

Iphone NSXMLParser Asynch-如何正确发布?,iphone,ios,asynchronous,nsxmlparser,Iphone,Ios,Asynchronous,Nsxmlparser,嗯。我使用的NSXMLParser如下所示: myParser = [[[BMLT_Parser alloc] initWithContentsOfURL:[NSURL URLWithString:uri]] retain]; [myParser setDelegate:self]; [myParser performSelectorInBackground:@selector(parse) withObject:nil]; 我有自己的子类,以便做一些事情,比如有一个内存池和一些实例数据。基本

嗯。我使用的NSXMLParser如下所示:

myParser = [[[BMLT_Parser alloc] initWithContentsOfURL:[NSURL URLWithString:uri]] retain];
[myParser setDelegate:self];
[myParser performSelectorInBackground:@selector(parse) withObject:nil];
我有自己的子类,以便做一些事情,比如有一个内存池和一些实例数据。基本上,可以认为BMLT_解析器与NSXMLParser相同

请注意,我是异步调用它的,因此在同步调用之后没有简单的释放

我所做的是声明以下委托函数:

- (void)parserDidEndDocument:(NSXMLParser *)parser  ///< The parser in question
{
    [myParser release];
    myParser = nil;
}
-(void)parserdinddocument:(NSXMLParser*)parser//<所讨论的解析器
{
[myParser发布];
myParser=nil;
}
myParser是解析器的一个实例变量。基本上,回调中的myParser==解析器

现在,问题是仪器告诉我解析器正在泄漏。解析器泄漏严重,因为它们装了很多行李

我还应该如何解除锁定asych解析器?我强烈怀疑我只是需要被引导到一个“M”,这样我就可以“RTFM”

谢谢

myParser = [[[BMLT_Parser alloc] initWithContentsOfURL:[NSURL URLWithString:uri]] retain];
在上面的代码中,u r首先通过alloc为myParser分配内存,然后再保留。这里,u r做得不对,因为只有当您拥有一个对象的所有权时,u才应该保留。但是通过alloc,u将获得对象“myParser”的所有权。 当你使用了这个对象,你需要释放它。 你应该像这样做

myParser = [[BMLT_Parser alloc] initWithContentsOfURL:[NSURL URLWithString:uri]];
[myParser setDelegate:self];
[myParser performSelectorInBackground:@selector(parse) withObject:nil];
[myParser release];
同样,在委托定义中,您首先释放对象,然后将其设置为nil。这是毫无意义的,因为如果您没有任何对象的内存,我们如何设置任何值。写一些像这样的东西

- (void)parserDidEndDocument:(NSXMLParser *)parser  ///< The parser in question
    {
    if(_myParser)
        {
          [_myParser release];
        }
    }
-(void)parserdinddocument:(NSXMLParser*)parser//<所讨论的解析器
{
if(_myParser)
{
[_myparserrelease];
}
}

我不太清楚您为什么在回调中这样做。我会再考虑一下。另一方面,Xcode 4.1/Lion中的工具完全破坏了块。我必须强制退出它大约5次中的4次。不需要拥有对象“myParser”的所有权。好的。我得到了它。这不是我100%的问题,但它是95%。