Адам ответил правильно. В псевдокоде:
unsigned int iters = 0;
NSAutoreleasePool *p = nil;
while(1) {
if (!p) p = [[NSAutoreleasePool alloc] init];
... do stuff here ...
if ( iters == 1000) {
iters = 0;
[p drain];
p = nil;
}
}
Повторное использование временных объектов, как правило, пустая трата времени и изобилует хрупкостью.
Честно говоря, вы, вероятно, должны просто выполнять танец пула с автоматическим выпуском один раз за каждую итерацию цикла и игнорировать любые глупые счетчики и тому подобное, пока не получите инструментальное доказательство того, что в противном случае есть издержки.
Что-то вроде:
NSAutoreleasePool *p = nil;
while(1) {
p = [[NSAutoreleasePool alloc] init];
... do stuff here ...
[p drain];
}