Quelle est la meilleure façon d'exécuter du code sur un thread séparé? Est-ce:
[NSThread detachNewThreadSelector: @selector(doStuff) toTarget:self withObject:NULL];
Ou:
NSOperationQueue *queue = [NSOperationQueue new]; NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doStuff:) object:nil; [queue addOperation:operation]; [operation release]; [queue release];
J'ai fait la deuxième façon, mais le livre de cuisine Wesley que j'ai lu utilise le premier.
À mon avis, le meilleur moyen est avec libdispatch, alias Grand Central Dispatch (GCD). Il vous limite à iOS 4 et plus, mais c'est tellement simple et facile à utiliser. Le code pour effectuer un traitement sur un thread d'arrière-plan, puis faire quelque chose avec les résultats dans la boucle d'exécution principale est incroyablement facile et compact:
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // Add code here to do background processing // // dispatch_async( dispatch_get_main_queue(), ^{ // Add code here to update the UI/send notifications based on the // results of the background processing }); });
Si vous ne l'avez pas déjà fait, regardez les videos de WWDC 2010 sur libdispatch / GCD / blocks.
La meilleure façon pour le multithreading dans iOS est d'utiliser GCD (Grand Central Dispatch).
//creates a queue. dispatch_queue_t myQueue = dispatch_queue_create("unique_queue_name", NULL); dispatch_async(myQueue, ^{ //stuffs to do in background thread dispatch_async(dispatch_get_main_queue(), ^{ //stuffs to do in foreground thread, mostly UI updates }); });
Je voudrais essayer toutes les techniques que les gens ont posté et voir qui est le plus rapide, mais je pense que c'est la meilleure façon de le faire.
[self performSelectorInBackground:@selector(BackgroundMethod) withObject:nil];
J'ai ajouté une catégorie sur NSThread qui vous permettra d'exécuter des threads dans des blocs avec facilité. Vous pouvez copyr le code d'ici.