Nella documentazione per gli sviluppatori, che dice:Il modo migliore per scaricare periodicamente il pool di autorelease su un thread in background di lunga durata?
Se l'applicazione o il filo è di lunga durata e potenzialmente genera un sacco di oggetti autoreleased, si dovrebbe periodicamente scarico e creare pool autorelease (come l'Application Kit fa sul principale filo); in caso contrario, gli oggetti autoreleased si accumulano e l'ingombro della memoria aumenta. Se, tuttavia, il thread separato non effettua chiamate Cocoa, non è necessario creare un pool autorelease.
Mi chiedevo quale sia il modo migliore per farlo. Ho diversi metodi che penso funzionerebbero, ma non so quale sia il "migliore". Al momento ho un metodo che avvia il filo e la mantiene in attesa per le operazioni da eseguire:
- (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];
}
Opzioni per il mio mi viene in mente sono:
1) aggiungere un contatore nel mentre (accessoryThreadIsRunning) in modo che ogni 50 o 100 volte scaricherà il pool di autorelease e ne creerà uno nuovo.
2) Ogni volta che eseguo un metodo in tale thread (utilizzando performSelector: onThread :), posso creare un pool di autorelease e quindi rilasciarlo alla fine del metodo.
3) Effettuare un timer in modo che una piscina venga scaricata e quindi creata periodicamente.
Penso che l'opzione 1 sia la migliore, ma vorrei sapere se c'è un modo diverso che dovrei fare. Grazie!
Penso che ci fosse un discorso in wwdc 10 su quello – RolandasR