内存泄漏NSXMLParser

时间:2011-06-10 14:36:20

标签: iphone objective-c ios nsxmlparser

我的NSXMLParser正在泄漏,我不知道为什么!仪器在扩展细节中说,来源是[Parser parse]的100%;

图片:Instruments leaks

这是我分配和发布NSXMLParser的代码:

NSURL *xmlURL = [NSURL URLWithString:@"http://www.website.com/link.xml"];
NSData * dataXml = [[NSData alloc] initWithContentsOfURL:xmlURL];
Parser = [[NSXMLParser alloc] initWithData:dataXml];
[dataXml release];
Parser.delegate = self;
[Parser parse];
[Parser release];

委托方法

  //Standard function parser: reading open tag
    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
      namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
        attributes:(NSDictionary *)attributeDict{ 
        currentElement = elementName;
        if ([elementName isEqualToString:@"item"]) {
            xmlArray = [[NSMutableDictionary alloc] init];
        }

    }



    //Standard function parser: reading string
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
        if ([currentElement isEqualToString:@"created_time"]){
            valueKey = [xmlArray valueForKey:currentElement];
            if(nil != valueKey) 
            {
                valueKey = [valueKey stringByAppendingString:string];
            }else
            {
                valueKey = string;
            }
            [xmlArray setObject:valueKey forKey:currentElement]; 
        }
        if ([currentElement isEqualToString:@"message"]){
            valueKey = [xmlArray   valueForKey:currentElement];
            if(nil != valueKey) 
            {
                valueKey = [valueKey stringByAppendingString:string];
            }else
            {
                valueKey = string;
            }
            [xmlArray setObject:valueKey forKey:currentElement]; 
        }
        if ([currentElement isEqualToString:@"picture"]){
            valueKey = [xmlArray valueForKey:currentElement];
            if(nil != valueKey) 
            {

            }else
            {
                valueKey = string;
            }
            [xmlArray setObject:valueKey forKey:currentElement]; 
        }
    }


    //Standard function parser: reading close tag
    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
      namespaceURI:(NSString *)namespaceURI
     qualifiedName:(NSString *)qName{ 
        if ([elementName isEqualToString:@"item"]) {
            Post *newPost = [[Post alloc] init];
            newPost.created_time = [xmlArray objectForKey:@"created_time"];
            newPost.message = [xmlArray objectForKey:@"message"];
            newPost.picture = [xmlArray objectForKey:@"picture"];
            [containerArray addObject:newPost];
            [xmlArray release];
            [newPost release];
        }
    } 

2 个答案:

答案 0 :(得分:1)

我怀疑你的didStartElement或didEndElement回调中发生了泄漏。请将这些发布,以便我们检查。

答案 1 :(得分:1)

这似乎是一个已知问题,也是NSXMLParser的一个漏洞。

NSXMLParser Leaking