0

谁能告诉我这个解析器代码是否有内存泄漏。

#import <Foundation/Foundation.h>

@interface WSXMLParser : NSObject<NSXMLParserDelegate>
{
    NSMutableDictionary* fullInfo;
    NSMutableString* keyName;
    NSMutableString* keyValue;
    BOOL shouldAddKeyValue;

}



- (NSMutableDictionary *)metaDataForXML:(NSURL*)xmlURL;

@end




#import "WSXMLParser.h"

@implementation WSXMLParser

-(NSMutableDictionary *)metaDataForXML:(NSURL *)xmlURL
{
    fullInfo=[[NSMutableDictionary alloc]init];
    keyValue=[[NSMutableString alloc] init];
    shouldAddKeyValue=NO;

    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
    [parser setDelegate:self];
    [parser parse];

    return fullInfo;
}


- (void)parserDidStartDocument:(NSXMLParser *)parser
{
   NSLog(@"parsing start");
}

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
   NSLog(@"parsing end");
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
    [keyValue setString:@""];
    shouldAddKeyValue=YES;

    keyName=[NSMutableString stringWithString:elementName];
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

    [keyValue appendString:string];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

    if(shouldAddKeyValue)
    {
        NSCharacterSet * whitespaceCharacterSet=[NSCharacterSet whitespaceAndNewlineCharacterSet];
        NSString *trimmedString = [keyValue stringByTrimmingCharactersInSet: whitespaceCharacterSet];

        if ([trimmedString length]==0)                
            return;

        NSString* value=[keyValue copy];
        [fullInfo setObject:value forKey:keyName];
        [keyValue setString:@""];
    }

    shouldAddKeyValue=NO;
}

@end

我正在使用 xcode 4.5.1 并启用了项目 ARC。此解析代码需要每 5-10 秒调用一次,如果调用此解析器几分钟,为什么应用程序会耗尽内存?

4

0 回答 0