Цель C, утечка памяти в libxml2 при разборе xml - PullRequest
1 голос
/ 06 февраля 2011

Я относительно новичок в цели C и, исходя из Java, управление памятью мне не дошло.

Я использую libxml2 для анализа XML-данных, и когда я запускаю свою программу с инструментами производительности, яполучить утечки памяти, и это говорит, что Ответственная Библиотека - libxml2.2.dylib.

Ниже кода, где я использую библиотеку xml.Кто-нибудь видит очевидные ошибки, которые я делаю?Дайте мне знать, если вам нужно больше деталей.

Приветствия, Стефан

- (void)fetchedXML:(GTMHTTPFetcher *)fetcher finishedWithData:(NSData *)retrievedData error:(NSError *)error{
if (retrievedData) {
    if(error==nil){
        NSString *xpathQueryString = nil; 
        NSArray *nodes = nil;

        //get total amount of persons
        xpathQueryString = @"//data/Person"; 
        nodes = PerformXMLXPathQuery(retrievedData, xpathQueryString);  

        int personCount = [nodes count];

        for (int i=1; i<=personCount; i++) {
            NSString *position = [NSString stringWithFormat:@"%d", i];                  
            NSArray *matchNodes = nil;

            xpathQueryString = [NSString stringWithFormat:@"//data/Person[%@]/FirstName/text()", position]; 
            matchNodes = PerformXMLXPathQuery(retrievedData, xpathQueryString);  
            NSString *personFirstName = [XMLHelper fetchContent:matchNodes];

            xpathQueryString = [NSString stringWithFormat:@"//data/Person[%@]/LastName/text()", position];  
            matchNodes = PerformXMLXPathQuery(retrievedData, xpathQueryString);  
            NSString *personLastName = [XMLHelper fetchContent:matchNodes];

            xpathQueryString = [NSString stringWithFormat:@"//data/Person[%@]/Job/text()", position];  
            matchNodes = PerformXMLXPathQuery(retrievedData, xpathQueryString);  
            NSString *personJob = [XMLHelper fetchContent:matchNodes];

            [Person storePerson:managedObjectContext personId:position firstName:personFirstName lastName:personLastName job:personJob];
        }
    }
  }         
}

Это код в классе LinkHelper.

+ (NSString *)fetchContent:(NSArray *)nodes { 
NSString *result = nil; 
for ( NSDictionary *node in nodes ) {
    for ( id key in node ) { 
        if( [key isEqualToString:@"nodeContent"] ) {
            result = [node objectForKey:key];
        }
    } 
}
return result;

}

...