Speicherverbrauch von NSDirectoryEnumerator reduzieren


Bei der Verwendung eines NSDirectoryEnumerator ist zu beachten, dass man innerhalb der while-Schleife einen separaten autorelease-Pool (NSAutoreleasePool) verwendet, da ein autoreleased String zurückgegeben wird.

NSDirectoryEnumerator mit steigendem Speicherverbrauch

NSDirectoryEnumerator* direnum = [fileManager enumeratorAtPath:path];
NSString* entry;
while (entry = [direnum nextObject]) {
// ...
}

NSDirectoryEnumerator mit konstantem Speicherverbrauch

NSDirectoryEnumerator* direnum = [fileManager enumeratorAtPath:path];
NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc] init];
NSString* entry;
while (entry = [direnum nextObject]) {
// ...
[innerPool release];
innerPool = [[NSAutoreleasePool alloc] init];
}
innerPool = nil;