Как выглядит внешний цикл? Если это что-то вроде:
for(n = 0; n < 1000; n++)
{
... something ...
[class saveImage:image withName:name];
}
Тогда оставление вещей в пуле автоматического выпуска может стать вашей проблемой. Автозапуск пула очищается только тогда, когда стек вызовов полностью возвращается назад к циклу выполнения (поскольку в противном случае вы не сможете использовать автоматически выпущенные вещи в качестве возвращаемых результатов). Учитывая, что вы ничего не выпускаете, вы можете попробовать изменить код на:
+ (void)saveImage:(UIImage *)image withName:(NSString *)name {
// create a local autorelease pool; this one will retain objects only
// until we drain it
NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init];
NSData *data = UIImagePNGRepresentation(image);
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *directory = [paths objectAtIndex:0];
NSString *fullPath = [directory stringByAppendingPathComponent:name];
[fileManager createFileAtPath:fullPath contents:data attributes:nil];
// drain the pool, which acts like release in reference counted environments
// but also has an effect in garbage collected environments
[localPool drain];
}
Таким образом, для каждого сохранения изображения вы создаете свой собственный пул автоматического выпуска. Последний инициализированный пул авто-релизов автоматически настраивается на перехват всех автоматически выпущенных объектов. В среде сборки мусора, такой как iOS, вызов «утечки» приводит к ее освобождению и немедленному освобождению всех объектов, которые он содержит.