Он протекает, потому что ваш самый внешний пул авто-релизов может выполнить свое действие только один раз.Любые автоматически выпущенные объекты, созданные в цикле while (1), будут просто сидеть и потреблять память, пока поток вашей программы не доберется до [истечения пула] в конце.
Чтобы избежать этого, создайте дополнительные вложенные пулы автоматического выпуска в вашем цикле, например так:
while(1) {
NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc] init];
// .. Do a bunch of stuff that creates autoreleased objects
[innerPool drain];
}
Этот подход аналогичен тому, как работает AppKit, создавая и истощая новый пул автоматического выпуска для каждой итерации через свой цикл событий.