96 votes

iphone ios fonctionnant dans un fil séparé

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.

243voto

Jacques Points 4622

À 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 certains traitements 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, visionnez les vidéos de WWDC 2010 sur libdispatch / GCD / blocks.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X