内存泄漏与NSXMLParser

时间:2011-02-27 23:57:18

标签: iphone objective-c memory-leaks nsxmlparser

我正在编写一个使用NSXMLParser来解析网站信息然后将其存储在我的应用中的应用。我发布了我在@finally块中创建的解析器,但是Instruments仍然将其显示为内存泄漏。除此之外,应用程序的行为是完美的。这是代码:

NSXMLParser *myParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; //<--memory leak

@try {

    if (myParser != nil)
    {
        [myParser setDelegate:self];
        [myParser setShouldProcessNamespaces:NO];
        [myParser setShouldReportNamespacePrefixes:NO];
        [myParser setShouldResolveExternalEntities:NO];
    }

    [myParser parse];

}
@catch (NSException * e) {
    NSLog(@"%@, %@",[e name], [e reason]);
}
@finally {
    [xmlURL release];
    [myParser release];
}

有关为什么会出现内存泄漏的任何建议?

**编辑* * *

以下是我在代码中实现的委托方法:

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI
(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"Cube"])
{
    if ([attributeDict objectForKey:@"time"])
    {
        NSArray *pathsArray =
        NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *path = [pathsArray objectAtIndex:0];
        NSString *timePlistPath = [NSString stringWithString:
            [path stringByAppendingString:@"/time.plist"]];

        NSString *TimeString = [attributeDict objectForKey:@"time"];
        [TimeString writeToFile:timePlistPath atomically:YES
            encoding:NSUnicodeStringEncoding error:nil];
    }

    if ([attributeDict objectForKey:@"currency"] && [attributeDict objectForKey:@"rate"])
    {
        NSString *currencyObject = [attributeDict objectForKey:@"currency"];
        NSString *rateObject = [attributeDict objectForKey:@"rate"];
        [mAryCurrency addObject:currencyObject];
        [mAryRates addObject:rateObject];
    }
}

}

这可能是泄漏的原因吗?

1 个答案:

答案 0 :(得分:0)

这是因为它可能在@finally,当它正在检查它的最可能假设@finally不会被调用,如果它在Build&amp; amp;中显示为泄漏分析,我会忽略它。

即使Apple建议发布@finally

    - (void)doSomething {

    NSMutableArray *anArray = nil;

    array = [[NSMutableArray alloc] initWithCapacity:0];

    @try {

        [self doSomethingElse:anArray];

    }

    @finally {

        [anArray release];

    }
}
相关问题