En la documentación para desarrolladores, que dice:¿La mejor manera de drenar periódicamente el grupo de autorrelease en un hilo de fondo de larga duración?
Si la aplicación o el hilo es de larga duración y potencialmente genera una gran cantidad de objetos autoreleased, se debe drenar periódicamente y crear grupos de autorelease (como el Kit de aplicaciones hace en el principal hilo); de lo contrario, los objetos liberados automáticamente se acumulan y su huella de memoria crece. Sin embargo, si su hilo separado no hace llamadas Cocoa, no necesita crear un grupo de liberación automática.
Me preguntaba cuál es la mejor manera de hacerlo. Tengo varios métodos que creo que funcionarían, pero no sé cuál es el "mejor". Actualmente tengo un método que se inicia el hilo y lo mantiene a la espera de operaciones a realizar:
- (void)startThread
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
accessoryRunLoop = [NSRunLoop currentRunLoop];
//Add a dummy port to avoid exiting the thread due to no ports being found
[accessoryRunLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
while(accessoryThreadIsRunning)
{
//Keep the thread running until accessoryTheadIsRunning == NO
[accessoryRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
[pool release];
}
Mis opciones que se me ocurren son:
1) añadir un contador en el tiempo (accessoryThreadIsRunning) para que cada 50 o 100 veces va a drenar el grupo de autorrelease y crear uno nuevo.
2) Cada vez que realizo un método en ese hilo (usando performSelector: onThread :), puedo crear un grupo de autorrelease y luego soltarlo al final del método.
3) Haga un temporizador para drenar un grupo y luego crearlo periódicamente.
Creo que la opción 1 es la mejor, pero me gustaría saber si hay una manera diferente en que debería estar haciendo esto. ¡Gracias!
Creo que se habló en wwdc 10 sobre eso – RolandasR