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?
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
De plus, parfois, vous n'avez pas besoin d'utiliser GCD, celui-ci est très simple à utiliser:
[self performSelectorInBackground:@selector(someMethod:) withObject:nil];