web-dev-qa-db-fra.com

déplacer une fonction vers un thread d'arrière-plan dans l'objectif c

J'ai une fonction qui renvoie une chaîne qui prend 15 secondes à calculer sur un iPhone.

Je veux pouvoir exécuter la fonction sur le thread d'arrière-plan afin que le thread principal puisse être utilisé pour l'interface utilisateur.

J'ai entendu que GCD est une nouvelle technologie qui est bonne pour cela, quelqu'un peut-il fournir un exemple de code concernant la façon dont cela fonctionnerait?

Cela consiste à exécuter une fonction générique sur le thread d'arrière-plan et à renvoyer le résultat dans un champ de texte de l'interface utilisateur.

MODIFIER:

Merci Alladinian ça marche un régal.

Cependant, lorsque j'utilise GCD, ma fonction prend 1 seconde de plus à s'exécuter sur le simulateur d'iphone (je suppose que cela durerait environ 5 secondes sur un iphone (je vais devoir le tester plus tard dans la journée pour en être sûr))

Y a-t-il une raison à cela? Peut-être que le fil d'arrière-plan est plus lent ou quelque chose?

26
MoKaM

Eh bien, c'est assez facile en fait avec GCD. Un flux de travail typique serait quelque chose comme ceci:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
dispatch_async(queue, ^{
    // Perform async operation
    // Call your method/function here
    // Example:
    NSString *result = [anObject calculateSomething];
    dispatch_async(dispatch_get_main_queue(), ^{
        // Update UI
        // Example:
        self.myLabel.text = result;
    });
});

Pour en savoir plus sur GCD, vous pouvez jeter un œil à la documentation d'Apple ici

87
Alladinian

De plus, parfois, vous n'avez pas besoin d'utiliser GCD, celui-ci est très simple à utiliser:

[self performSelectorInBackground:@selector(someMethod:) withObject:nil];
6
Trausti Thor