Я нахожусь в своем первом опыте разработки iPhone. Я написал базовый код для тестирования класса NSScanner, и теперь я изучал инструмент «Утечки». Кажется, что этот код протекает, когда в подробном стеке я дважды щелкаю мой последний вызов (до материала Apple), инкриминированная строка - это комментарий.Ошибка утечки памяти NSScanner
Может ли кто-нибудь помочь мне понять, почему это происходит? с логической точки зрения результат - это то, что я ожидаю, и я сам не формально ничего не расписываю (за исключением переменной xmlblock, которая является btw autoreleased), поэтому я не ожидал необходимости выпускать что-либо ... где я ' Неправильно? :-)
+(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];
}
Кстати, вам не нужно создавать пустую строку для 'scanUpToString: inString:', вы можете просто установить ее на 'nil', и метод изменит ее, если она сканирует текст. Другой потенциально полезной вещью является то, что все эти методы NSScanner возвращают логическое значение на основе того, были ли они успешными или нет. – jtbandes