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