このパーサー コードでメモリ リークが発生していないか教えてください。
#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 秒ごとに呼び出す必要があります。このパーサーが数分間呼び出されると、なぜアプリのメモリが不足するのでしょうか??