Quel est le meilleur moyen 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];
Je fais la deuxième façon mais le livre de recettes Wesley que j'ai lu utilise la première.
À mon avis, le meilleur moyen est d'utiliser libdispatch, alias Grand Central Dispatch (GCD). Cela vous limite à iOS 4 et supérieur, mais c'est tellement simple et facile à utiliser. Le code permettant d'effectuer un traitement sur un thread en arrière-plan, puis de modifier les résultats dans la boucle d'exécution principale est incroyablement simple 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, consultez les vidéos de WWDC 2010 sur libdispatch/GCD/blocks.
Le meilleur moyen de multithreading dans iOS consiste à 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ées et voir laquelle est la 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 facilement des threads dans des blocs. Vous pouvez copier le code à partir d'ici.