undoData
должен быть предварительно установлен для автоматического освобождения (согласно соглашению об именах dataWithContentsOfFile:
возвращает объект автоматического освобождения). Но если у вас нет собственного пула автоматического выпуска, то все, что установлено как автоматическое освобождение, фактически не будет освобождено до тех пор, пока активный пул не будет удален (т.е. через некоторое время после возврата вашей функции).
Ваш поток может иметь собственный пул автоматического выпуска, но если вы не создадите его в своей собственной функции, ничто не будет освобождено до тех пор, пока ваша функция не закроется.
Если вы хотите инициировать слив автоматически выпущенных объектов в середине функции (скажем, один раз за цикл), вам нужно управлять собственным пулом автоматического выпуска.
while(looping) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// do stuff that produces autoreleased objects
[pool drain];
}
Кроме того, согласно комментарию cobbal к вашему вопросу, похоже, что вы не должны выпускать undoData2
(или undoData3
). В соответствии с соглашением об именах -[NSXMLDocument XMLData]
должен возвращать автоматически освобожденный объект.