NSScanner утечка памяти - PullRequest
       6

NSScanner утечка памяти

0 голосов
/ 14 ноября 2009

Я на своем первом опыте разработки iPhone. Я написал некоторый базовый код для тестирования класса NSScanner, и теперь я изучал инструмент Leaks. Кажется, что этот код протекает, когда в детализированном стеке я дважды щелкаю свой последний вызов (перед вещами Apple), инкриминированная строка - это комментарий.

Может кто-нибудь помочь мне понять, почему это происходит? с логической точки зрения результат - это то, что я ожидаю, и я сам не выделяю ничего формально (за исключением переменной xmlblock, которая, кстати, автоматически выпущена), поэтому я не ожидал бы необходимости что-либо выпускать ... я не прав? : -)

+(NSSet *)extractXMLSectionsWithTag:(NSString *)tag fromString:(NSString *)source firstOnly:(BOOL)firstOnly
{
 if (!source)
    return nil;
 NSScanner *scanner = [NSScanner scannerWithString:source];
 NSString *openingToken = [NSString stringWithFormat:@"<%@", tag];
 NSString *closingToken = [NSString stringWithFormat:@"</%@>", tag];
 NSMutableSet *sections = [NSMutableSet set];
 NSCharacterSet *majorChar = [NSCharacterSet characterSetWithCharactersInString:@">"];

 while (![scanner isAtEnd]) {
    NSString *xmlBlock = [[[NSString alloc] init] autorelease];
    [scanner scanUpToString:openingToken intoString:NULL];
    [scanner scanString:openingToken intoString:NULL];
    [scanner scanUpToCharactersFromSet:majorChar intoString:NULL];
    [scanner scanCharactersFromSet:majorChar intoString:NULL];
    [scanner scanUpToString:closingToken intoString:&xmlBlock];
    if (![xmlBlock isEqualToString:@""]) { // Leaking line
        [sections addObject:xmlBlock];
        if (firstOnly) {
            break;
        }
    }
 }
 return [sections copy];
}

1 Ответ

1 голос
/ 14 ноября 2009

Я почти уверен, что утечка вызвана возвратом [секции copy] из метода, подобного которому, вы должны вернуть автоматически освобожденную строку, а не сохраненную.

В XCode выберите опцию «Build & Analyze» и посмотрите, что там написано об этом коде.

...