Пул автоматического выпуска ничего не делает, так как вы не выпускаете автоматически какие-либо объекты - вы размещаете изменяемую строку в одном месте, освобождая ее в другом. "appendString" вообще ничего не делает для сохранения счетчика MutableString.
Что касается утечки, вот в чем дело - Утечки сообщают вам, где утечка памяти была выделена . Таким образом, это означает, что в той части, которая выделяет память, все в порядке - что не в порядке, так это то, что где-то еще память, которая была сохранена в этом методе, должна была быть освобождена, а это не так.
Так что в какой-то момент позже может показаться, что вы извлекаете resultString из dataDict, в который вы его помещаете, сохраняете его и не освобождаете его (мне кажется, что вы выпустите его нормально при разборе, чтобы это не было причиной ). Чтобы убедиться, что это так, измените вставку строки на ::
[dataDict setObject:[[resultString copy] autorelease] forKey: elementName];
И утечки должны сказать вам, что утечка есть. Чтобы помочь отследить утечку, каждый раз, когда вы извлекаете строку из этого dataDict, вы можете [скопировать] ее, и тогда вы приблизитесь к точному коду, который пропускает строки.
По сути, «Утечки» подобны раскрытию книги о тайнах с кем-то мертвым. Вы должны выяснить, кто убийца - или в случае утечек, кто должен был совершить убийство, но не удосужился.