开发者

Memory leak NSXMLParser [duplicate]

开发者 https://www.devze.com 2023-03-12 05:24 出处:网络
This question already has answers here: NSXMLParser Leaking (4 answers) Closed 2 years ago. My NSXMLParser is leaking and I don\'t know why! Instrument is saying, in the extended details, t
This question already has answers here: NSXMLParser Leaking (4 answers) Closed 2 years ago.

My NSXMLParser is leaking and I don't know why! Instrument is saying, in the extended details, that the source is 100% from [Parser parse];

Picture: Instruments leaks

This is my code for allocating and releasing the 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];

The delegate methods

  //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];
        }
    } 


I suspect that the leak is occurring inside your didStartElement or didEndElement callbacks. Please post these up so that we can check.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号