Утечка памяти с NSXMLParser на IPhone - PullRequest
0 голосов
/ 09 ноября 2010

ниже - мой код, Ликс говорит, что у меня утечка памяти из-за метода выделения NSMutableString. Я уверен, что это то, что я просто упустил, дайте мне знать, если у кого-то есть какие-либо мысли. Спасибо!


-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

    if (!currentValue) {
        currentValue = [[NSMutableString alloc] initWithCapacity:[string length]];
    }

    [currentValue setString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];

}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    if([elementName isEqualToString:@"phone"]){

      currentAgent.phone = currentValue;
    }

    [currentValue release];

    currentValue = nil;

}

-Агент - это пользовательский объект, который был создан при инициализации класса. XML действителен и имеет все соответствующие теги начала / конца.

1 Ответ

1 голос
/ 09 ноября 2010

Просматривая этот код, я думаю, что более вероятно, что ваш класс Агента пропускает телефон.Предполагая, что агент использует retain для свойства телефона, это заставит телефон сохраняться дольше, чем следует.

Создатель объекта получает "кредит" с утечкой, даже если дополнительное удержание находится где-то еще.

Другими словами, в агенте:

- (void)dealloc {
    self.phone = nil;
    // anything else you need to do
    [super dealloc];
}
...